TI中文支持网
TI专业的中文技术问题搜集分享网站

430F1xx的UART0,UART1是否能同时启用?

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是认不出那个仿真器。

赞(0)
未经允许不得转载:TI中文支持网 » 430F1xx的UART0,UART1是否能同时启用?
分享到: 更多 (0)