久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3928|回復: 0
打印 上一主題 下一主題
收起左側

MSP430F5529用DMA接收串口數(shù)據(jù),并作出回應

[復制鏈接]
跳轉到指定樓層
樓主
ID:903336 發(fā)表于 2021-9-18 23:03 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "msp430.h"
#define CPU  ((double)4000000)  
#define delay_ms(x)   __delay_cycles((long)(CPU*(double)x/1000.0))
#define delay_us(x)   __delay_cycles((long)(CPU*(double)x/1000000.0))
#define TX_Num 10        //發(fā)送數(shù)組大小
#define RX_Num 10        //接收數(shù)組大小
#define Frame_Header    0xEE             //接收幀頭
#define Frame_End       0xFF             //接收幀尾
void XT_init(void);                      //晶振初始化函數(shù)
void Receive_Handle(void);               //接收處理函數(shù)
void DMA_init(void);                     //DMA初始化理函數(shù)      
unsigned char TxString[TX_Num];          //發(fā)送數(shù)組  
unsigned char RxString[RX_Num];          //接收數(shù)組  
unsigned char RX_Succeed;                //接收正確標志
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  XT_init();                                //晶振初始化

  //初始化串口
  P4SEL |= BIT4+BIT5;                       //選擇P4.4、P4.5 為串口1
  UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCA1CTL1 |= UCSSEL__ACLK;                  //串口時鐘源為ACLK ,在初始化為32.768kHz
  UCA1BR0 = 3;                              // 32768  9600 (see User's Guide)
  UCA1BR1 = 0;                              // 32768 9600
  UCA1MCTL |= UCBRS_3 + UCBRF_0;            // Modulation UCBRSx=3, UCBRFx=0
  UCA1CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  DMA_init();                               //DMA初始化
  _EINT();
  while(1)
  {
    if (RX_Succeed==1)                     //正確接收
    {
      RX_Succeed=0;                        //清除接收標志
      DMA1CTL|=DMAEN;                       //啟動DMA通道1發(fā)送數(shù)據(jù)
    }
  }
}


void DMA_init(void)
{
  int i=0;
  DMACTL0 = DMA0TSEL_20|DMA1TSEL_21;            // 通道0接收數(shù)據(jù),通道1發(fā)送數(shù)據(jù)
  DMA0CTL&=~DMAIFG;                             //先清除通道0中斷標志位
  DMA1CTL&=~DMAIFG;                             //先清除通道1中斷標志位
  //配置通道0接收
  DMACTL4=DMARMWDIS;                            //禁止任何發(fā)生在CPU 讀寫操作時候的DMA傳輸
  //重復單次傳輸+開啟使能+目標地址增加+字節(jié)傳輸 +開啟中斷
  DMA0CTL = DMADT_4 + DMAEN + DMADSTINCR_3+DMADSTBYTE+ DMAIE;
  DMA0SZ = RX_Num;                               // 接收字節(jié)大小
  __data16_write_addr((unsigned short) &DMA0SA,(unsigned long) &UCA1RXBUF);//源地址為串口1接收地址
  __data16_write_addr((unsigned short) &DMA0DA,(unsigned long) &RxString);//目的地址是接收數(shù)組

  //配置通道1發(fā)送

  //單次傳輸+源地址增加+字節(jié)傳輸 +電平觸發(fā)+ 開啟中斷
  DMA1CTL = DMADT_0 + DMASRCINCR_3  + DMASRCBYTE + DMALEVEL + DMAIE;
  DMA1SZ = TX_Num;                               // 發(fā)送字節(jié)大小
  __data16_write_addr((unsigned short) &DMA1SA,(unsigned long) &TxString);//源地址為發(fā)收數(shù)組
  __data16_write_addr((unsigned short) &DMA1DA,(unsigned long) &UCA1TXBUF);//目的地址是串口1發(fā)送地址

  //初始化發(fā)送數(shù)組
  for(i=0;i<10;i++)
  {
     TxString[i]=0x0a+i;
  }
}

#pragma vector=DMA_VECTOR
__interrupt void DMA_ISR(void)
{
  switch(__even_in_range(DMAIV,4))
  {
  case 0x00:
    break;
  case 0x02: //通道0 接收到數(shù)組
   Receive_Handle();  
    break;

  }
}
void Receive_Handle(void)
{
  if(RxString[0]==Frame_Header&&RxString[RX_Num-1]==Frame_End)//數(shù)據(jù)接收正確
  {
    //對數(shù)據(jù)進行處理
    RX_Succeed=1; //接收正確標志
  }

}


void XT_init(void)
{
  P5SEL |= BIT4|BIT5|BIT2|BIT3;                      // Select XT1、XT2
  UCSCTL6 &= ~(XT1OFF|XT2OFF);                     // XT1、XT2 On
  UCSCTL6 |= XCAP_3;                        // Internal load cap
  do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag
  UCSCTL6 &= ~(XT1DRIVE_3+XT2DRIVE0);                 // Xtal is now stable, reduce drive strength
  UCSCTL4 =SELA_0+SELS__XT2CLK+SELM__XT2CLK;              
  UCSCTL5|=DIVS__4;      //ACLK 32768,SMCLK  1M ,MCLK  4
}



下載.png (111.83 KB, 下載次數(shù): 206)

DMA 成功接收數(shù)據(jù)并作出回應

DMA 成功接收數(shù)據(jù)并作出回應

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂1 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日日干夜夜草 | 国产精品人人做人人爽人人添 | 久久久www成人免费精品 | 在线观看av不卡 | 国产日韩视频 | 秋霞一区二区 | 成人毛片在线播放 | 成人三级小说 | 久久国产精品一区二区三区 | 欧美日韩黄 | 一级黄色在线观看 | 久久精品国产免费 | 中文字幕99 | 在线观看av的网站 | 午夜激情福利视频 | 在线观看欧美日韩 | 国产成人精品亚洲男人的天堂 | 国产在线小视频 | 午夜精品在线 | 天天操天天插 | 波多野结衣乳巨码无在线观看 | 999热视频| 久久88 | 日韩a在线观看 | 免费日韩 | 91午夜精品亚洲一区二区三区 | 亚洲精彩视频 | 超碰免费公开 | 久久国产成人 | 成人在线小视频 | 免费成人毛片 | 亚洲一级二级三级 | 国产欧美日本 | av免费观看网站 | 性视频在线 | 天天爽夜夜爽 | 日本一级淫片 | 深夜视频在线观看 | 黄色一级免费视频 | 欧美日韩精品一区二区 | 爱爱短视频 |