我想在 TM4C123GH6PM (在 Tiva C 系列 TM4C123G Launchpad 评估套件中)使用计时器。 因此、我决定在周期定时器模式下使用 GPTM TimerA0。 我定义了的地址
寄存器、并按照 数据表第 722页中第11.4.1节单次触发/周期定时器模式给出的步骤操作。 我希望 LED 每3秒闪烁一次(连接到
端口 F 引脚1)。 但 LED 始终亮起。 我所指的寄存器地址是否错误? 还是代码的问题?
//定时器寄存 器#define RCGCTIMER(*(volatile unsigned long *) 0x400FE604) #define GPTMCTL(*(volatile unsigned long *) 0x4003000C)//timer zero #define GPTMCFG(*(volatile unsigned long *) 0x40030000) #define GPTMTAMR(*(volatile unsigned long *) 0x4003004) #define GPTMRIS(#define GPTMR30028)#define GPTMTAMR (#define GPTMTAMR)(#define GPTMR30028)( (*(volatile unsigned long *) 0x4003001C) #define GPTMICR(*(volatile unsigned long *) 0x40030024)) //端口 F 寄存 器#define GPIO_PORTF_LOCK_R (*(volatile unsigned long *) 0x40025520) #define GPIO_PORTF_DATA_R (*((volatile unsigned long*) 0x400253FC) #define GPIO_PORTF_DIR_R (*(volatile unsigned long *) 0x40025400) #define GPIO_PORTF_AFSEL_R (*(volatile unsigned long *) 0x40025420) #define GPIO_PORTF_DEN_R (*(volatile unsigned long *) 0x4002551C) #define SYSCTL2_RCGC2_R (*(volatile unsigned long *) 0x400FE108) #define SYSCTL_RCGC2_GPIOF 0x00000020 //端口 F 时钟门控控制 空初始化 Timer() { RCGCTIMER |= 0x00000001;//要使用 GPTM,必须在 RCGCTIMER 中设置相应的 TIMERn 位。 这里是 TIMER0 //周期计时器模式 GPTMCTL &=(~0x00000001);//TAEN 置位0。 Timer A 禁用。 GPTMCFG = 0x00000000;//向 GPTM 配置寄存器(GPTMCFG)写入0x0000.0000 GPTMTAMR = 0x00000002;// TAMR 置位0x2。 使用周期定时器模式(在两条语句中、第一个位1被置位1、然后 bit0被置位0) GPTMTAMR &= 0xFFFFFFEF;//TACDIR 被置位0。 计时器递减计数。 GPTMTAILR = 0x02DC6C00;//TAILR 设置为48、000、000、000 GPTMCTL |=0x00000001;//TAEN 设置为1。 Timer A 已启用 。} void 初始化 PORTF() { volatile unsigned long delay; SYSCTL2_RCGC2_R |= 0x00000020; // 1) F 时钟 延迟= SYSCTL2_RCGC2_R; //延迟 GPIO_PORTF_LOCK_R = 0x4C4F434B;// 2)解锁 GPIO 端口 F GPIO_PORTF_DIR_R |= 0x02; // PF2输出 GPIO_PORTF_AFSEL_R &= 0x00; //无备用功能// 1) F 时钟 GPIO_PORTF_DEN_R |= 0x02; //启用数字引脚 PF2 GPIO_PORTF_DATA_R |= 0x02; //PF1设置为1。 LED 亮起 } int main() { 初始化 Timer(); 初始化 PORTF(); while (1) {//Did TATORIS in GPTMRIS 变为1?? if (((GPTMRIS | 0x00000001)= 1) { GPTMICR |= 0x00000001;//将1设置为 TATOCINT。 向该位写1清除 GPTMRIS 寄存器的 TATORIS 位和 GPTMMIS 寄存器的 TATOMIS 位。 GPIO_PORTF_DATA_R ^= 0x02;//切换 PF1。 切换 LED } }