2155|0

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

MSP430F5638 串口输入中断问题 [复制链接]

我采用MSP430F5638的UCA0 与 TMS320F28335的Scic口进行通信:
MSP430F5638的程序如下:
  1. #include <intrinsics.h>
  2. #include <string.h>
  3. #include "msp430.h"
  4. #include "driverlib/MSP430F5xx_6xx/flash.h"
  5. #include "driverlib/MSP430F5xx_6xx/wdt_a.h"
  6. #include "driverlib/MSP430F5xx_6xx/ucs.h"
  7. #include "driverlib/MSP430F5xx_6xx/pmm.h"
  8. #include "driverlib/MSP430F5xx_6xx/sfr.h"
  9. #include "driverlib/MSP430F5xx_6xx/inc/hw_memmap.h"
  10. #include "IQmathLib.h"
  11. #include "hal.h" // Modify hal.h to select your hardware

  12. #include "Main_F5528_Scan.h"

  13. void INIT_SciB_Char(void);


  14. void main(void)
  15. {

  16. WDTCTL = WDTPW + WDTHOLD; // Stop Watchdog Timer
  17. // for 24MHz MCLK, below.
  18. PMM_setVCore(PMM_BASE, PMM_CORE_LEVEL_3);

  19. initPorts(); // Config all the GPIOS for low-power (output low)
  20. initClocks(24000000); // Config clocks.

  21. P8SEL |= BIT2 + BIT3; // P3.3,4 = USCI_A0 RXD/TXD 触摸屏通信
  22. UCA1CTL1 |= UCSWRST; // 重置UCA0
  23. UCA1CTL1 |= UCSSEL_2; // SMCLK 6MHz
  24. UCA1BR0 = 0x71; // 波特率9600
  25. UCA1BR1 = 0x02; // 波特率9600
  26. UCA1MCTL = 0x00; // No Modulation
  27. UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**

  28. P2SEL |= BIT4 + BIT5; // P4.4,5 = USCI_A1 RXD/TXD F28335通信
  29. UCA0CTL1 |= UCSWRST; // 重起UCA1
  30. UCA0CTL1 |= UCSSEL_2; // SMCLK 6MHz
  31. UCA0BR0 = 0x34; // 波特率1152000
  32. UCA0BR1 = 0x00; // 波特率115200
  33. UCA0MCTL = 0x40;
  34. UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**

  35. // setup watchdog as 1 second timer 设置在看门狗模式看门狗定时器的时钟源。
  36. // WDT_A_watchdogTimerInit(WDT_A_BASE,WDT_A_CLOCKSOURCE_SMCLK,WDT_A_CLOCKDIVIDER_512K);
  37. // WDT_A_start(WDT_A_BASE);

  38. UCA0IFG = 0x00; // 清UCA0中断标识
  39. UCA0IE = 0x01; // 使能UCA0中断;
  40. UCA0IE |= UCRXIE; // 使能UCA0接收中断;UCRXIE

  41. UCA1IFG = 0x00; // 清UCA1中断标识
  42. UCA1IE = 0x01; // 使能接收中断;
  43. UCA1IE |= UCRXIE; // 使能UCA1接收中断

  44. UCS_getSMCLK(UCS_BASE);
  45. UCS_getMCLK(UCS_BASE);
  46. UCS_getACLK(UCS_BASE);

  47. __enable_interrupt(); // enable interrupts

  48. TX_FuncNO = 4;

  49. for(;;)
  50. {
  51. }
  52. }

  53. #pragma vector=USCI_A0_VECTOR
  54. __interrupt void USCI_A0_ISR(void)
  55. {

  56. while (!(UCA0IFG&UCRXIFG)); // USCI_A0 TX buffer ready?
  57. RSciA_Char = UCA0RXBUF;

  58. UCA0IFG = 0x00;; //MSP430 清UCA1中断标识
  59. }
  60. //*****************************************************************************
  61. // UART1中断服务子程序。接收触摸屏菜单指令并处理
  62. //*****************************************************************************

  63. #pragma vector=USCI_A1_VECTOR
  64. __interrupt void USCI_A1_ISR(void)
  65. {

  66. TX_FuncNO = 4;
  67. //取F28335 存放的样本数据
  68. while(UCA0STAT && UCBUSY){};
  69. UCA0TXBUF = TX_FuncNO;         //发送功能号第1个字节,
  70. while(UCA0STAT && UCBUSY){};
  71. UCA0TXBUF = TX_FuncNO >> 8; //发送功能号第2个字节,

  72. UCA1IFG = 0x00;; //MSP430 清UCA0中断标识
  73. }
复制代码
问题是:当TMS320F28335连续不断的发送时,MSP430F5638的UCA0会发生读入中断; 但当TMS320F28335单一发送一两个字符时读入中断就不会发生.

这是什么原因呢?怎么解决?

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表