- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式系统原理及应用第四章习题.
第四章 硬件作业习题
7、编写一程序,用查询的方式,对S3C2410X的A/D转换器的第0通道连续进行100次A/D转换,然后将其结果求平均值。注意:A/D转换器有独立的模拟信号输入引脚AIN0---AIN9。
解:
(1)计算预分频值
由于A/D转换器的最高输入时钟为2.5MHz,取为1MHz,则
预分频值+1 = 50M/1M = 50
所以 预分频值 = 49
(2)程序如下:
#define?rADCCON?(*(volatile unsigned *)0
#define rADCDAT0 (*(volatile unsigned *)0x5800000c)
#define pref 49
#define ch 0
int adc(int chan)
{
rADCCON=(114)|(pref6)|(ch3)|1; //设置预分频、通道、启动转换
while(rADCCON0x8000==0); //查询转换否结束
return rADCDAT00x3ff; //读取转换结果
}
void main()
{
int adc_data=0, i;
for(i=0;i100;i++)
adc_data+=adc();
adc_data=adc_data/100;
printf(adc average is: %d\n,adc_data);
}
9、S3C2410X的中断控制器的工作过程是怎样的?对于IRQ,整个中断过程是怎样的(中断控制器处理,向CPU请求,转到中断入口,转去获得中断服务程序的首地址,执行中断服务程序)?
答:S3C2410X中断控制器有56个中断源,对外提供24个外中断输入引脚,内部所有设备都有中断请求信号,例如DMA控制器、UART、IIC等等。
S3C2410X的ARM920T内核有两个中断,IRQ中断和快速中断FIQ。
中断仲裁:当中断控制器接收到多个中断请求时,其内的优先级仲裁器裁决后向CPU发出优先级最高的中断请求信号或快速中断请求信号。
中断系统结构:主要由中断源和控制寄存器两大部分构成,其寄存器主要有4种:模式、屏蔽、优先级、挂起(标志)寄存器等。
(1)中断控制器的工作过程:
中断源
(有子中断)
FIQ
IRQ
(2)接收到IRQ中断时,由中断控制器处理,经过中断源挂起寄存器(如果是有子中断的中断源还要经过子中断源挂起寄存器和子中断源屏蔽寄存器),查看是否有中断请求,有中断请求经过中断模式寄存器标志IRQ中断,经过中断屏蔽寄存器查看允许中断,允许中断再经过中断挂起寄存器查看是否有中断请求,有中断请求向CPU请求,转到中断入口,转去获得中断服务程序的首地址,执行中断服务程序
10、编写一程序,使用外部中断EINT0,用中断方式对端口C做数据输入。(注意对中断系统和相关引脚进行初始化)
解:
#include stdio.h
#define rGPCCON (*(volatile unsigned *)0 //
#define rGPCDAT (*(volatile unsigned *)0 //
#define rGPFCON (*(volatile unsigned *)0 //
#define rSRCPND (*(volatile unsigned *)0x4a000000) //
#define rINTMSK (*(volatile unsigned *)0x4a000008) //
#define rINTPND (*(volatile unsigned *)0x4a000010) //
#define rEXTINT0 (*(volatile unsigned *)0 //
#define pISR_EINT0 (*(volatile unsigned *)(_ISR_STARTADDRESS+0x48)) //
void gpio_test(void)
{
Uart_Printf(“GPIO C Input test!\n”);
rGPCCON = 0x00; //设置C口为输入
rGPFCON = rGPFCON (~0x03) | 0x02;//上位置F口的第0位为中断输入
rSRCPND = 0x01; //清除外中断0请求标志
rINTMSK = 0x01; //开
文档评论(0)