搜索
bottom↓
回复: 0

我写了一个UART3的串口驱动程序,可是不能运行,小白求救...

[复制链接]

出0入0汤圆

发表于 2013-6-1 19:19:35 | 显示全部楼层 |阅读模式
//=============================================================//
//                                                             //
//   document:5438A(UART3.c)                                   //
//   statement:MPS430开发板(加外部晶振)                        //
//   writer  :haochaoxue                                       //
//   time    :2013.6.1                                         //
//                                                             //
//=============================================================//
#include "MSP430F5438A.h"
void init_clock(void);
void init_uart3(void);

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;   
  init_clock();
  init_uart3();
  __bis_SR_register(LPM0_bits + GIE);        //enter LPM0,interrupt enabled
  __no_operation();
}

void init_clock(void)
{
  unsigned int i;
  WDTCTL = WDTPW + WDTHOLD;
  //director:设置基础时钟,调整之后分频,计算正确的波特率
  P11DIR = BIT0 + BIT2 + BIT4;
  P11SEL |=BIT0 + BIT2 + BIT4;
  P5SEL  |=0x0C;//director:选择外部时钟(port select XT2)
  UCSCTL6 &=~ XT2OFF; //director:enable XT2 if not used
  UCSCTL3 |= SELREF_2; //director:FLLref = REFO
  UCSCTL4 |= SELA__XT2CLK;//director:ACLK from XT2 4M
  UCSCTL4 |= SELS_5 + SELM_5;//director:SMCLK=MCLK=XT2=4M
  _NOP();
  UCSCTL5 = DIVM_2 + DIVS_4 + DIVA_4;//director:XT2-4M,SMCLK-1M,ACLK-1M;
  //END
  //director:wait for Osc working
  do
  {
    UCSCTL7 &=~ (XT2OFFG + XT1LFOFFG + DCOFFG);//clear XT2,XT1,DCO fault flags
    SFRIFG1 &=~ OFIFG;//director:Clear fault flags
    for(i=0;i<0xFFFF;i++);//director:wait for Osc to stabilize  
  }while(SFRIFG1&OFIFG);//director:test Osc fault flag
}
//END

void init_uart3(void)
{
  P10SEL |= 0x30;//director:p10.4TXD,p10.5RXD
  UCA3CTL1 |= UCSWRST;
  UCA3CTL1 |= UCSSEL__SMCLK;
  //director:波特率设定
  UCA3BR0 = 0x0A;   //1M 9600
  UCA3BR1 = 0x00;   //1M 9600
  //END
  UCA3MCTL |= UCBRS_3 + UCBRF_0;//director:set USCI state machine
  UCA3CTL1 &=~ UCSWRST;//director:init USCI state machine
  UCA3IE |= UCRXIE;//director:enable USCI_A3 RX interrupt
}

#pragma vector=USCI_A3_VECTOR
__interrupt void USCI_A3_ISR(void)
{
  switch(__even_in_range(UCA3IV,4))
  {
  case 0:break;//director:Vector 0_no interrupt
  case 2:
    while(!(UCA3IFG&UCTXIFG));//director:判空
    UCA3TXBUF = UCA3RXBUF;//director:将接收到的东西返还给发送者
    break;
  case 4:break;
  default:break;
  }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 12:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表