430F1xx的UART0,UART1是否能同时启用?同时还要考虑使用TIME A,它们在使用内部时钟系统时有什么讲究?我的一个程序在初始化两个UART后,在走到TIME A 后,单步调试就走不下去了。Debug出现的错误是: Target execution stopped ,和 reset_vector:00FFFF DC8.
wszqq:
只要支持UART0、UART1两个串口的芯片就可以同时用。串口和TIMEA选择时钟源没什么干扰,除非在低功耗等场合考虑关闭时钟源的情况需要注意。调试的时候看看看门狗是否已经关闭。UART0、UART1、TIMEA的中断函数是否写的正确,特别是中断地址对不对。
Lina Lian:
Songlin Qin,
只要你选择的msp430f1xx device支持两个UART(有两个USART模块), 那么UART0和UART1就可以同时启用。UART和TIMER_A的时钟均可选择来自ACLk, SMCLK或者外部。故UART和TIMER_A是可以同时工作的。但是如果系统中有进入LPMx的情况的话,需要考虑进入不同的LPMx,可用的系统时钟(MCLK, SMCLK, ACLK)是不同的。例如在LPM3时,只有ACLK是可用的。即若timer或者UART使用SMCLk作为时钟输入,那么在LPM3时,他们是不能正常工作的。
Lina Lian:
Songlin Qin,
另外,关于你所描述的,
Songlin Qin reset_vector:00FFFF DC8
现象不符合常理,因为interrupt vector一般位于0FFFFh − 0FFE0h,不可能超过0xFFFF. 可否具体描述一下或者是截个图?
你使用的是CCS还是IAR,将其升级到最新版吧。
user47326:
回复 Lina Lian:
图1:单步调试停止时的截图。
图2:单步调试停止前的位置。
图3:连续运行时,在TIMEA中断程序中设置的断点。但好像没有进入该中断程序中。
原来的程序是一个UART,TIMRE A,ADC12,LCD12864。是别人写的,能用。现在想改为两个UART,一个TIME A,和LCD12864。
两个初始化UART:
void InitUART0(void) //修改 初始化458串口 12、11.1
{
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
ME1 |= URXE0 + UTXE0; // Enable USART0 T/RXD
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL0; // UCLK = ACLK ?
UBR00 = 0x03; // 32k/9600
UBR10 = 0x00; //
UMCTL0 = 0x4a; // Modulation
UCTL0 &= ~SWRST; // Initialize USART state machine
IE1 |= URXIE0+UTXIE0; //使能接收中断 ?发送?
}
void InitUART1(void)
{
P3SEL |= 0xC0; //将P3.6,P3.7选做UART1的通信端口
ME2 |= URXE1+UTXE1; //使能USART1的TXD
UCTL1 |= CHAR; //选择8-bit字符
UTCTL1 |= SSEL0; //驱动时钟选择ACLK
UBR01 = 0x03; //波特率9600
UBR11 = 0x00;
UMCTL1 = 0x4a; //调整
UCTL1 &= ~SWRST; //初始化UART状态机
IE2|=URXIE1; //QQ12/14 }
Lina Lian:
回复 user47326:
Songlin Qin,
看了你的截图,在使能中断后,系统复位了。你查看一下中断标志位,看看是什么原因导致的系统复位。
感觉在设置timer之前,系统就复位了,故一直不进入timer中断。你试着在程序的第一句关闭看门狗处设置一个断点,看看程序是不是一直跑到此断点处。
user47326:
回复 Lina Lian:
我用的USB仿真器是淘宝网上的国产货。能被IAR6.0识别和使用,但CCS5.3认不出这个仿真器。除了买一个TI 的真品,又没有其它办法。
user47326:
回复 user47326:
确实是系统复位了,每一次都会跑到程序起点,请问如何解决?
user47326:
回复 user47326:
问题解决了,把 initUART0()的最后一句的UTXIE0去掉即可。问题是为什么这个UTXIE0会引起系统复位呢?
Lina Lian:
回复 user47326:
Songlin Qin,
请问你具体使用的device型号是什么?UART应该不会引起系统复位的。
user47326:
回复 Lina Lian:
我调试的芯片是430F149,小系统是在淘宝上买的,自己又扩了一LCD12864的接口和两个485串口。 前面的两个initUART()是现成的UART.c上抄来的。后来我发现那个initUART0()单独使用也有问题。通过比较两个程序才解决了问题。是不是淘宝上买来UCB仿真器也有问题,反正CCS5.3是认不出那个仿真器。