基于aduc7026嵌入式系统的数字时钟设计学习笔记手册内容摘要:

如果有外设产生一个中断请求信号, IRQ 中断相应的位会被置位,否则会被清 0。 IRQEN 中断使能寄存器 当某一位置 1 时,相应的中断源可以请求中断,相反,相应的中断源没有被使能。 IRQCLR 中断屏蔽寄存器 可以用来清空在 IRQEN 寄存器中相应的位,当某一位置 1 有效。 要想取消一个已经使能的中断源,用户必须通过 IRQCLR 对应的位置 1 来实现。 单独清空 IRQEN 中相应的位不会取消这歌中断。 与 FIQ 相关的寄存器也是 4 个分别是 FIQSAT FIQSIG FIQEN FIQCLR 各控制位的定义与 IRQ 相同。 非常重要的一点, ARM7 外部中断引脚的有效信号为高电平。 首先从第五的步的程序开始,以下是程序中我自己感觉与外部中断有关的语句我摘录下来,并且逐个按自己的理解解释相关的寄 存器功能及编程使用方法。 GP0CON = 0x00。 // 配置 外部中断 IRQ1 IRQEN = XIRQ1_BIT。 // 使能外部中断 IRQ1 void IRQ_Handler(void) __irq {。 中断服务子程序 return。 } 为单片机第 41 引脚,根据引脚上名称提示,复合功能有 IRQ1。 所以使用中断需要设置 GPIO 的功能。 根据第一步的学习 ARM7 单片机引脚功能选择寄存器为 GPxCON GPxCON 为 32 位寄存器两位控制一个引脚的状态, 比如要控制 为功能 2 SOUT 也就是数据 10 GP2CON= 的 1: 0 位 为 10 其他位 为 00 GP2CON=0x00000002 根据 P120 表 提示 的第一个功能为 GPIO/IRQ1 如果设置了中断寄存器则当中断外部信号输入引脚使用,如果没有设置则作为 GPIO 引脚使用。 根据表格 P122 表 可知, 21: 20 位对应的两位为 引脚的功能选择,所以 21: 10 位 为 00. GP0CON = 0x00。 // 配置 外部中断 IRQ1 IRQEN = XIRQ1_BIT。 // 使能外部中断 IRQ1 在上面介绍 IRQEN 是中断使能,但是书本上没有讲仔细写对应的表,查资料研究 IRQ1 对应的使能位。 那XIRQ1_BIT 是什么呢。 通过 KEIL3 软件程序语句定位功能,找到了 的文件, 是 KEIL3 提供的 ARM\INC\。 而且默认包含进来的,所以 IRQ1 的对应的设置在程序函数中已经包含。 不过这句话也可以单独来写,那样的话就不自动包含 ,比如写成 IRQEN= 0x00040000。 ARM7 有 24 个中断源,对应 IRQ1 位第 18 位。 define XIRQ1_BIT 0x00040000。 其他的中断请求在函数里有我将其复制下来: define FIQ_SOURCE_BIT 0x00000001 define SWI_BIT 0x00000002 define RTOS_TIMER_BIT 0x00000004 define GP_TIMER_BIT 0x00000008 define WAKEUP_TIMER_BIT 0x00000010 define WATCHDOG_TIMER_BIT 0x00000020 define FLASHCON_BIT 0x00000040 define ADC_BIT 0x00000080 define PLL_LOCK_BIT 0x00000100 define SM_SLAVE_BIT 0x00000200 define SM_MASTER0_BIT 0x00000400 define SM_MASTER1_BIT 0x00000800 define SPI_SLAVE_BIT 0x00001000 define SPI_MASTER_BIT 0x00002020 define UART_BIT 0x00004000 define XIRQ0_BIT 0x00008000 define MONITOR_BIT 0x00010000 define PSM_BIT 0x00020200 define XIRQ1_BIT 0x00040000 define PLA_IRQ0_BIT 0x00080000 define PLA_IRQ1_BIT 0x00100000 define SPM4_IO_BIT 0x00202000 define SPM5_IO_BIT 0x00400000 define PWM_BIT 0x00800000 还有一点非常重要的是 void IRQ_Handler(void) __irq {。 中断服务子程序 return。 } 跟 51 单片机一样它的中断服务子程序被包含在这里。 注意函数后面的 _irq 以及函数里面的 return,到这里 ARM7内核的外部中断告一段落。 附件五:第五步程序源代码 —— 三维论坛下载( ) 基于 ADuC7026 嵌入式系统的数字时钟设计学习笔记 六 又是一个硬战,需要学习 ARM7 的内部定时器的使用,还是一样从提供的参考程序中找到与内部定时器相关的程序“红绿灯”。 下载程序可以看到数码管低两位显示数据 30 并 1S 的延时倒计时,同时相应的指示灯亮。 开始研究,需要去掉数码管和 LED 控制部分采用 1S 内部定时控制蜂鸣器报警。 因为这个程序的 LED 控制是 SPI ,用了一个 74HC595 芯片控制的 8 个 LED 采用 74HC 系列引脚 8 个 LED 对应只需要四个引脚可以控制 ,而且 还以级联 , SPI 通信的 SCLK CS MOSI MISO 分别与 ADuC7026 的 58 51 52 57 引脚链接ARM7 内部的 SPI 通信。 这部分不需要使用,所以暂时去掉。 但是这个功能非常强大以后会用到。 在 51 单片机控制多字点阵的项目中,就用到了 74HC595 串转并级联芯片,但是 51 单片机内部没有 SPI 通讯这个功能所以用的程序模拟的。 但是在这个单片机上是直接使用的,下次用的时候可以学习这部分程序。 现在开始裁剪,将与 LED 点亮的程序及数码管显示的程序去掉。 程序经过简化,蜂鸣器间断报警延时时间 1S,并且延 时时间采用内部定时器查询方式的程序如下,下面进行分析: include void SysClkInit(void) { PLLKEY1=0xAA。 PLLCON=0x01。 // PLL 配置 PLLKEY2=0x55。 POWKEY1=0x01。 POWCON=0x02。 // CPU 时钟配置为 POWKEY2=0xF4。 } void main() { SysClkInit()。 while(1) { GP2DAT = 0x08080000。 // 配置 为输出引脚同时输出高电平 T1LD = 0xA0000。 // 配置计数器的值,大约为 1 秒 T1CON = 0xC4。 // 使能 Timer1,周期模式,二进制数据格式, CLK/16 while (T1VAL!=0){} // 判断是否计数为零 T1CON = 0x00。 // 不使能 Timer1 GP2CLR = 0x00080000。 // 输出低电平 T1LD = 0xA0000。 // 配置计数器 的值,大约为 1 秒 T1CON = 0xC4。 // 使能 Timer1,周期模式,二进制数据格式, CLK/16 while (T1VAL!=0){} // 判断是否计数为零 T1CON = 0x00。 // 不使能 Timer1 } } 知识点来源课本第 14 章 定时器 ADuC7206 定时器有 4 个,可以工作在自由模式和周期模式,工作在自由模式,计数器将从最大值递减计数一直到最小值,并且在达到最小值后重新递增计数一直到最大值。 也可以反过来。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。