在线时间101 小时
UID288887
注册时间2011-5-8
NXP金币0
该用户从未签到
中级会员
 
- 积分
- 491
- 最后登录
- 1970-1-1
|
本帖最后由 lonny 于 2015-4-27 19:09 编辑
在调试kl02,用到串口中断与外部gpio中断。单独测试每个中断,程序正常。将两个中断同时初始化,先进入串口中断后,外部中断就进不去了。初始化与中断函数如下。
void PORTA_IRQHandler(void)
{
printf("enter gpio interrupt");
Rotate_Flag = 1;
PORTA_PCR7 |= PORT_PCR_ISF_MASK;
ADXL345_WR_Reg(INT_ENABLE,0x00);
//PORTA_ISFR = PORT_ISFR_ISF(0x0000);
}
void UART0_IRQHandler()
{
printf("enter uart0 intrrupt");
if(UART0_S2 & UART0_S2_RXEDGIF_MASK)//ÊÕµ½Æðʼλ
{
UART0_S2 |= UART0_S2_RXEDGIF_MASK;
UART0_BDH &= ~UART0_BDH_RXEDGIE_MASK;
}
if((UART0_S1 & UART0_S1_RDRF_MASK)!=0)
{
pUartBufWrite = UART0_D;
}
if((UART0_S1 & 0x0f) != 0)
{
UART0_S1 |= (UART0_S1_NF_MASK | UART0_S1_OR_MASK); // write 1 to clear error flags
}
}
void GPIO_Iterrupt_Init() //pTA7
{
PORTA_ISFR = PORT_ISFR_ISF(0x0080); /* Clear interrupt status flag */
PORTA_PCR7 = PORT_PCR_MUX(1); // ÅäÖÃΪÖÐ¶Ï IRQ4
PORTA_PCR7 |= PORT_PCR_IRQC(0x08); //µÍµçƽÖжÏ
set_irq_priority((INT_PORTA-16), 1);
enable_irq(INT_PORTA - 16); //enable interrupt 30
}
void uart0_init (UART0_MemMapPtr uartch, int uart0clk, int baud)
{
register uint16 sbr;
uint8 temp;
SIM_SCGC4 |= SIM_SCGC4_UART0_MASK;
/* Make sure that the transmitter and receiver are disabled while we
* change settings.
*/
UART0_C2_REG(uartch) &= ~(UART0_C2_TE_MASK
| UART0_C2_RE_MASK );
/* Configure the uart for 8-bit mode, no parity */
UART0_C1_REG(uartch) = 0; /* We need all default settings, so entire register is cleared */
/* Calculate baud settings */
temp = UART0_C4;
temp = (temp & UART0_C4_OSR_MASK) + 1;
sbr = (uint16)((uart0clk)/(baud * (temp)));
//sbr = (uint16)((uart0clk*1000)/(baud * 16)); //lonny
/* Save off the current value of the uartx_BDH except for the SBR field */
temp = UART0_BDH_REG(uartch) & ~(UART0_BDH_SBR(0x1F));
UART0_BDH_REG(uartch) = temp | UART0_BDH_SBR(((sbr & 0x1F00) >> 8));
UART0_BDL_REG(uartch) = (uint8)(sbr & UART0_BDL_SBR_MASK);
/* Enable receiver and transmitter */
UART0_C2_REG(uartch) |= (UART0_C2_TE_MASK| UART0_C2_RE_MASK | UART0_C2_RIE_MASK);
set_irq_priority(INT_UART0 - 16,0); //
enable_irq(INT_UART0 - 16);
}
经测试,在主函数while(1)里放一printf()打印信息,无法打印。程序已跑飞,但还能进串口中断
|
|