我最近在用到timer0的时候用查寻的方法做延时,但是,就是装载不进去定时器的初始值,而在用到中断方式的时候就可以把初始值装载到定时器里面,我的定时器的初始化和中断的是一样的,现在不明白什么原因导致的,请高人指点:
#define TIMER0_BASE 0x40030000 // Timer0
#define TIMER_MIS_TATOMIS 0x00000001 // 该位表示屏蔽之后定时器A的超时中断状态
#define TIMER_O_ICR 0x00000024 // Interrupt clear register
#define TIMER_ICR_TATOCINT 0x00000001 // TimerA time out interrupt clear
#define TIMER_O_CTL 0x0000000C // Control register
#define TIMER_O_CFG 0x00000000 // GPTM配置寄存器
#define TIMER_CTL_TAEN 0x00000001 // TimerA enable
#define TIMER_O_IMR 0x00000018 // Interrupt mask register
#define TIMER_INT_DATA 6000000 // TimerA定时初始值
#define TIMER_O_TAILR 0x00000028 // TimerA 间隔装载复位值
#define TIMER_RIS_TATORIS 0x00000001 // TimerA time out raw int status
#define TIMER_O_TAMR 0x00000004 // TimerA mode register
#define PINS2 GPIO_PIN_4
// 定义全局的系统时钟变量
void delay(unsigned long d)
{
for(;d;d--);
}
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
void main(void)
{
SysCtlClockSet( SYSCTL_SYSDIV_1 | // 设定晶振为时钟源。
SYSCTL_USE_OSC |
SYSCTL_OSC_MAIN |
SYSCTL_XTAL_6MHZ );
SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOB ); // 使能GPIO B口外设。
GPIODirModeSet(GPIO_PORTB_BASE,PINS2,GPIO_DIR_MODE_OUT); // 设置 B5为输出口。
GPIOPinWrite( GPIO_PORTB_BASE, PINS2, 0 ); // 初始化IO口。
SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER0 ); // 使能定时器0外设
HWREG(TIMER0_BASE + TIMER_O_CTL) &= (~TIMER_CTL_TAEN); //关闭定时器
TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_OS); // 设置定时器0为周期触发模式。
TimerLoadSet(TIMER0_BASE, TIMER_A, SysCtlClockGet()); // 设置定时器装载值。定时0.5秒。
HWREG(TIMER0_BASE + TIMER_O_IMR) &=0x00;
HWREG(TIMER0_BASE + TIMER_O_CTL) |= TIMER_CTL_TAEN; //打开定时器
while(1)
{
while( HWREG(TIMER0_BASE + TIMER_RIS_TATORIS)==0);
HWREG(TIMER0_BASE + TIMER_O_ICR) |=TIMER_ICR_TATOCINT; //溢出中断清零
GPIOPinWrite(GPIO_PORTB_BASE, PINS2,GPIOPinRead GPIO_PORTB_BASE, PINS2) ^ PINS2);
}
}
这个TimerLoadSet函数就是装载不了值,切盼指教!!!!!!!!
|
|