网站大量收购独家精品文档,联系QQ:2885784924

第4章b 基于S3C2410硬件结构与接口编程.ppt

  1. 1、本文档共153页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
while(1){ if((up==1)(count==1)){ up=0; count=0; scankey=KeyBoard_Map[tempmcukey]; break; } else continue; } return scankey; } 【例4-11】 键盘及LED控制编程。 (1)键盘中断 在本例子中,键盘扫描码是通过中断的方式获得的,当设置好上位机的I2C地址以后,单片机(MEGA8)检测到键盘变化时,会主动发送键盘扫描码。这时ARM将产生I2C中断,在中断服务程序中获得键盘扫描码,键盘按下时发送0x80|scancode,抬起时发送scancode,scancode即为键盘扫描码,再通过GetKey()函数映射成可以在led上显示的数据。下面主要说明键盘中断的流程,本实验在中断前进行了两步初始化。 首先是对中断中用到一个结构体的设置,结构体中各成员变量的意义见 结构体的定义,这一步是在函数ISR_Init()中完成的,这个函数在ISR.C中,主要是对中断中用到的寄存器进行初始化,这些寄存器包括INTMOD,INTMSK,INTSUBMSK,SRCPND,INTPND。 其次是在主函数中完成对键盘中断服务函数和中断偏移量(INTOFFSET)的关联,对单片机(MEGA8)工作方式进行设置,其中包括对I2C总线的初始化,这是在函数Key_init()中完成的,此函数在KeyBoard.c中。中断服务函数和中断偏移量(INTOFFSET)的关联是通过函数SetISR_Interrupt(IRQ_KBD,Key_ISR,NULL)来完成的.有了这一步的关联以后当查询到中断偏移量是IRQ_KBD时就会根据此偏移量调用键盘中断服务函数Key_ISR。 有了上面两步的初始化工作以后,当有键盘按下时就会发生IRQ中断,过程是先跳转到startup.s中的b IRQ_Handler处,然后保存寄存器r0-r12,lr跳转到函数ISR_IrqHandler中,在这个函数中查询中断向量的偏移量,根据这个偏移量调用相应的中断服务函数。执行完中断服务函数后再跳转回startup.s中的LDMFD sp!, {r0-r12, lr}处,恢复执行中断服务函数之前的状态,继续执行发生中断服务前的下一条指令,至此中断过程结束,在中断服务函数中获得键盘的扫描码,再通过GetKey()函数映射成led可以显示的数据。 (2)键盘及LED控制编程实例主要参考代码 主函数代码如下: ? int main(void) { U8 key; ARMTargetInit(); //ARM开发板初始化 Key_init(); //键盘初始化 while(1){ key=GetKey(); //取键值 Led_IIC_init(); //LED IIC初始化 hudelay(100); //延迟 IIC_Write(ZLG7290_ADDR, ZLG7290_ScanNum, 0); //设置数码管显示位 IIC_Write(ZLG7290_ADDR, ZLG7290_DpRam0, key); //数码管显示键值 hudelay(2000); //延迟 Key_init_restor(); //I2C初始化,设置I2C模式 hudelay(100); //延迟 } return 0; } ? 涉及中断的主要定义和函数代码如下: ? typedef void (*mask_func_t)(unsigned int); typedef struct{ Interrupt_func_t InterruptHandlers; void* data; int valid; //设置中断1=有效0=无效 mask_func_t mask; mask_func_t unmask; mask_func_t ack_irq; }struct_InterruptFunc; stati

文档评论(0)

bhyq + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档