在线时间0 小时
UID336509
注册时间2011-12-28
NXP金币0
该用户从未签到
新手上路

- 积分
- 192
- 最后登录
- 1970-1-1
|
我学习使用中断来处理uart0上的数据,可是不能进入中断函数,
我的步骤如下,烦请高手帮我看下,我的问题出现在哪里??
我的方法是按照一个帖子上说明来做的,该帖子的出处在https://www.eefocus.com/bluewave/blog/08-03/144744_f3449.html
我使用的步骤如下:
1.在mcf5225x_vectors.s中定义中断
#define _uart0_handler uart0_handler
.extern _uart0_handler
/*Exception Vector Table */
VECTOR_TABLE:
_VECTOR_TABLE:
INITSP: .long ___SP_INIT /* Initial SP */
INITPC: .long _asm_startmeup /* Initial PC */
vector02: .long _asm_exception_handler /* Access Error */
vector03: .long _asm_exception_handler /* Address Error*/
.......
vector77: .long _uart0_handler 计算中断的位置 55+64=119=0x77,不知道是否有问题??
.......
2. 在MCF52259_UART_driver.h中声明中断函数
__declspec(interrupt:0) void uart0_handler(void); 此写法和void __declspec(interrupt) uart0_handler(void)有什么区别??
定义开启中断宏:
#define EnableInterrupts asm { move.w SR,D0; andi.l #0xF8FF,D0; move.w D0,SR; }
3. 在MCF52259_UART_driver.c中的
__declspec(interrupt:0) void uart0_handler(void)函数里处理了
如果接收到字符就将其字符输出.
4. 在MCF52259_UART_driver.c中对Uart0口进行初始化的函数如下:
void uart0_init(uint32 baudrate)
{ //设置中断的级别和优先级
MCF_INTC0_ICR55 = MCF_INTC_ICR_IL(0x3) |MCF_INTC_ICR_IP(0x3);
MCF_INTC0_IMRH &= ~MCF_INTC_IMRH_INT_MASK55;
MCF_INTC0_IMRL &= ~MCF_INTC_IMRL_MASKALL; //不知道在这里设置中断属性是否合适??
MCF_GPIO_PUAPAR=MCF_GPIO_PUAPAR_UTXD0_UTXD0|MCF_GPIO_PUAPAR_URXD0_URXD0;
//Reset Transmitter Receiver Mode Register
.....
//Set UART interrupts 不确定这样确定uart中断是否合适?
MCF_UART0_UIMR=0
|MCF_UART_UIMR_TXRDY|MCF_UART_UIMR_FFULL_RXRDY
|MCF_UART_UIMR_DB|MCF_UART_UIMR_COS;
//initialize the input enable control (IEC bit)
MCF_UART0_UACR = MCF_UART_UACR_IEC;
//Set Rx and Tx buad by SYSTERM CLOCK
//No parity,8bit data
//1 bit stop
//set buad rate
//Enable Tx/Rx
}
5. 在main.c函数中
void main (void)
{ //开启中断
EnableInterrupts;
//uart init
uart0_init();
while(1)
{
}
}
如上设置后,不能进入中断函数uart0_handler中,不知道原因在何处??
希望有高手帮我解决下,先谢谢各位了!!!!!
|
|