工具/软件:Code Composer Studio
大家好。
我英语不太好。 请理解。
当前处于睡眠模式测试中。 编译器正在使用 IAR ARM 7.40进行开发。
但是、在下载后下载并打开电源时、RX 中断不起作用、并请求帮助。
//
//
//睡眠模式计时器 ISR
// jhsong 40ms
//
无效
SlepModeIntHandler (空)
{
unsigned int volatile ui32Val;
ST_TIME_1s.COUNT++;
ST_TIME_50ms.flag = 1;
if (st_time_1s.count>(1000/40))
{
ST_TIME_1s.COUNT = 0;
ST_TIME_1s.flag = 1;
ST_TIME_2S.COUNT++;
if (st_time_2s.count> 2)
{
ST_TIME_2S.COUNT = 0;
ST_TIME_2S.flag = 1;
}
}
返回;
}
/
UART1、Rx 完整 UART1_RXC_vect (0x48)
(二 /
//#ifdef USE_UART1
空 Uart1_enqueue (空)
{
字节 tmp = 0;
tmp = UARTCharGet (UART0_BASE);
//tmp = UARTCharGetNonBlocking (UART0_BASE);
COMM_Queue[UART_1].baRxQueue[comm_queue[UART_1].nRxHead]= tmp;
COMM_queue[UART_1].nRxHead++;
if (comm_queue[UART_1].nRxHead >= RX_queue_size)
Com_queue[UART_1].nRxHead = 0;
}
空 USART1_Init (uint32_t brate)
{
//启用 UART 外设模块
SysCtrlPeripheralEnable (SYS_CTRL_Periph_UART0);
//禁用 UART 功能
UARTDisable (UART0_BASE);
//将 IO 时钟设置为 UART 时钟源
UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC);
/232 PA0、PA1
IOCPinConfigPeriphOutput (GPIO_A_base、PA0_PIN_UART_TXD、IOC_MUX_OUT_SEL_UART0_TXD);//UART1 설정
GPIOPinTypeUARTOutput (GPIO_A_base、PA0_PIN_UART_TXD);
IOCPinConfigPeriphInput (GPIO_A_base、PA1_PIN_UART_RXD、IOC_UARTRXD_UART0);//UART1 설정
GPIOPinTypeUARTInput (GPIO_A_base、PA1_PIN_UART_RXD);
UARTConfigSetExpClk (UART0_BASE、SysCtrlClockGet ()、brate、
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
UARTIntDisable (UART0_BASE、0x1FFF);
UARTIntRegister (UART0_BASE、&UART1_ENqueue);
UARTIntEnable (UART0_BASE、UART_INT_RX | UART_INT_RT);
UARTFIFOEnable (UART0_BASE);
UARTEnable (UART0_BASE);
//UARTEnableSIR (UART0_BASE、0);
}
void sleep_init (void)
{
uint32_t ui32Val;
//
//在进入深度睡眠时让系统进入功率模式2
//
SysCtrlPeripheralDeepSlepDisable (SYS_CTRL_Periph_GPT0);
SysCtrlPeripheralDeepSlepDisable (SYS_CTRL_Periph_GPT1);
SysCtrlPeripheralDeepSlepDisable (SYS_CTRL_Periph_GPT2);
SysCtrlPeripheralDeepSlepDisable (SYS_CTRL_Periph_GPT3);
SysCtrlPeripheralDeepSlepDisable (SYS_CTRL_Periph_SSI0);
SysCtrlPeripheralDeepSlepDisable (SYS_CTRL_Periph_SSI1);
SysCtrlPeripheralDeepSlepEnable (SYS_CTRL_Periph_UART0);
SysCtrlPeripheralDeepSlepEnable (SYS_CTRL_Periph_UART1);
SysCtrlPeripheralDeepSlepDisable (SYS_CTRL_Periph_I2C);
SysCtrlPeripheralDeepSlepDisable (SYS_CTRL_Periph_PKA);
SysCtrlPeripheralDeepSlepDisable (SYS_CTRL_Periph_AES);
SysCtrlPeripheralDeepSlepDisable (SYS_CTRL_Periph_RFC);
//
//启用睡眠定时器唤醒
//
SysCtrlPowerModeSet (SYS_CTRL_PM_2);
GPIOIntWakeupEnable (GPIO_IWE_SM_TIMER);
IntEnable (INT_SMTIM);//
//将计时器设置为高于当前值10000
//
ui32Val = SlepModeTimerCountGet ();
睡眠模式定时器比较集(ui32Val + WAKE_UP_TIME);
SysCtrlDeepSlep();
}
void sleep_on (void)
{
unsigned int volatile ui32Val;
SysCtrlPeripheralDeepSlepEnable (SYS_CTRL_Periph_UART0);
SysCtrlPeripheralDeepSlepEnable (SYS_CTRL_Periph_UART1);
ui32Val = SlepModeTimerCountGet ();
睡眠模式定时器 CompareSet (ui32Val +(WAKE_UP_TIME));
SysCtrlDeepSlep();
}
main (空)
{
unsigned int i;
//将时钟设置为直接从外部晶振/振荡器运行。
//(无外部32k osc、无内部 osc)
//
SysCtrlClockSet (false、false、SYS_CTRL_SYSDIV_32MHz);
SysCtrlIOClockSet (SYS_CTRL_SYSDIV_32MHz);
GPIO_init();
USART1_Init (115200);
USART2_Init (115200);
//看门狗使能(watchdog_interval_32768);
sleep_init();
while (1)
{
SLEEP_ON();
}
}