打印

UART的RX中断怎么进不去啊~请高手指点一下

[复制链接]
3027|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sainbrady|  楼主 | 2009-3-16 21:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
UART, BLE, TE, AN, ST
情况是这样的,我写了一个比较简单的程序测试UART通信,源程序如下,我把P2口接到8个共阳LED上,只要能进入RX中断LED就由暗变亮,但是编译器报错:!E lib/libpsoc.lib(lib/obj/uart_1int.obj)(15):(482) symbol "_UART_1_RX_ISR" is defined more than once in "output\UARTTest2.obj" (error)
说是函数符号在目标函数中已经定义过了,去掉中断句柄声明后不报错了,但是却进不了RX中断函数(LED灯不亮),改变boot.asm里的中断向量表也不起作用,有哪位碰到过类似的情况,或者把你们调试成功的UART中断程序给我看一下,毕设很棘手,谢谢了!
源程序:
#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules
#pragma interrupt_handler UART_1_RX_ISR

void main()
{
    PRT2DR=0xff;
    UART_1_EnableInt()        // Enable RX,TX interrupts  
    UART_1_Start(UART_PARITY_NONE);    // Enable UART  
    M8C_EnableGInt ;            // Turn on interrupts 
    UART_1_PutChar('X');
    while(1)
    {
    }
    // Insert your main routine code here.
}

void UART_1_RX_ISR(void)
{
    PRT2DR = 0x00;
}
沙发
shanyu20| | 2009-3-17 09:32 | 只看该作者

试试

在论坛里有说过中断的,在boot.tpl文件里把中断换一个名字,如在我的定时器中断里修改如下:
org   28h                      ;PSoC Block DCB02 Interrupt Vector
//`@INTERRUPT_10`
ljmp TIMER_1_ISR
reti
添加了ljmp TIMER_1_ISR语句
然后在主程序里添加
#pragma interrupt_handler TIMER_1_ISR
void TIMER_1_ISR(void)
{
}
注意:boot.tpl文件可以在你的工程所在文件夹里可以找到
在《ImageCraft C Compiler Guide》有中断写法介绍的
To associate the interrupt handler with an interrupt, add ljmp _name at the interrupt vector in the
boot.tpl file.

使用特权

评论回复
板凳
sainbrady|  楼主 | 2009-3-18 14:28 | 只看该作者

问题解决了

听了你的建议,问题终于得到解决了,谢谢shanyu20。
以前我也看了不少贴,一直以为中断向量表是在boot.asm里改的,原来是在boot.tpl里改才有效,哈哈,但是编译器居然不让我用默认中断函数名,还是不解……

使用特权

评论回复
地板
shanyu20| | 2009-3-19 10:11 | 只看该作者

我的猜测

  我的猜测是在模块自己生成的汇编程序(如CmpLPInt.asm文件比较器中断)里已经定义了默认中断函数,如果我们再在主程序里定义,就是重复定义了。
  然而论坛上说的另外一种方法,我试验没有成功,就是在默认中断函数里添加一条跳转到主程序的中断处理函数的命令。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

11

帖子

0

粉丝