<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > msp430F149與cc2500通訊啟用USART1,SPI初始化

          msp430F149與cc2500通訊啟用USART1,SPI初始化

          作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò) 收藏
          剛開(kāi)始接觸這個(gè)SPI,又是與cc2500,看著英文手冊(cè),弄了老半天,才把讀寫(xiě)寄存器給弄清,分享一下:
          //=========================================================
          //本模塊為spi通訊模塊,程序啟用USART1,針對(duì)與cc2500的相互通訊
          //=========================================================
          #include<msp430x14x.h>
          #include"spi.h"
          #include"cc2500_def.h"
          #define SPI_SEL P5SEL
          #define SPI_DIR P5DIR
          #define SPI_IN P5IN
          #define SPI_OUT P5OUT
          #define CSn BIT0
          #define SIMO BIT1
          #define SOMI BIT2
          #define UCLK BIT3
          void init_spi(void)//msp430 spi初始化 同步串行接口
          { SPI_DIR |= CSn; //CS 禁止
          SPI_OUT |= CSn;
          U1CTL |= SWRST; // 芯片復(fù)位
          U1CTL |= CHAR + SYNC + MM; // 8-bit SPI 主機(jī)模式
          U1TCTL |= CKPH + SSEL1 + SSEL0 + STC; // SMCLK,3線模式
          U1BR0 = 0x02; // UCLK/2
          U1BR1 = 0x00; // 0
          U1MCTL = 0x00;
          ME2 |= USPIE1; // 使能SPI #define USPIE1 (0x10)
          UCTL1 &= ~SWRST; // 取消復(fù)位
          SPI_SEL |= SIMO + SOMI + UCLK;//引腳功能選擇,第二功能
          SPI_DIR |= SIMO + UCLK; // 端口方向設(shè)置
          }
          //寫(xiě)入寄存器,是8位address + 8位data, 8位地址為 0 B A5 A4 A3 A2 A1 A0
          //其中,0表示write option B表示burst寫(xiě)的時(shí)候,置1
          //在突發(fā)方式寫(xiě)cc2500寄存器
          //U1TXBUF = addr + CC2500_WRITE_BURST; 發(fā)送地址,起始地址加突發(fā)頭#define CC2500_WRITE_BURST 0x40
          //寫(xiě)cc2500寄存器
          void spi_WriteReg(unsigned char addr,unsigned char value)
          {
          SPI_OUT &= ~CSn; // CS 使能
          while (SPI_IN & SOMI); // 等待cc2500準(zhǔn)備好 CHIP_RDYn,stays high until power and crystal have stabilized .
          //Shoule always be low when using the SPI interface.
          IFG2 &= ~UTXIFG1; // 清除標(biāo)志,USART1發(fā)送中斷標(biāo)志位
          U1TXBUF = addr; // 發(fā)送地址  UxTXBUF 發(fā)送數(shù)據(jù)寄存器
          while (!(IFG2 & UTXIFG1));// 等待發(fā)送完成
          IFG2 &= ~UTXIFG1; // 清除標(biāo)志
          U1TXBUF = value; // 發(fā)送內(nèi)容
          while (!(IFG2 &UTXIFG1));// 等待完成
          SPI_OUT |= CSn; // CS 禁止
          }
          //突發(fā)方式寫(xiě)cc2500寄存器
          void spi_WriteBurstReg(unsigned char addr,unsigned char *buffer,unsigned char count)
          {
          unsigned char i;
          SPI_OUT &= ~CSn; // CS 使能
          while (SPI_IN & SOMI); // 等待cc2500準(zhǔn)備好
          IFG2 &= ~UTXIFG1 ;
          U1TXBUF = addr + CC2500_WRITE_BURST; // 發(fā)送地址,起始地址加突發(fā)頭#define CC2500_WRITE_BURST 0x40
          while (!(IFG2 & UTXIFG1)); // 等待發(fā)送完成
          for (i = 0; i < count; i++)
          {
          U1TXBUF = buffer[i]; // 發(fā)送內(nèi)容
          while (!(IFG2 & UTXIFG1)); // 等待完成
          IFG2 &= ~UTXIFG1 ;
          }
          // IFG2 &= ~URXIFG1;
          //while(!(IFG2 & UTXIFG1));
          SPI_OUT |= CSn; // CS 禁止
          }
          //讀寄存器,是8位address + 8位data, 8位地址為 1 B A5 A4 A3 A2 A1 A0
          //其中,1表示read option B表示burst讀的時(shí)候,置1
          //burst read cc2500寄存器
          // U1TXBUF = (addr | CC2500_READ_BURST);發(fā)送地址#define CC2500_READ_BURST 0xC0
          //讀cc2500寄存器
          unsigned char spi_ReadReg(unsigned char addr)
          {
          unsigned char x;
          SPI_OUT &= ~CSn; // CS 使能
          while (SPI_IN & SOMI);// 等待cc2500準(zhǔn)備好
          IFG2 &= ~UTXIFG1; //清除標(biāo)志
          U1TXBUF = (addr | CC2500_READ_SINGLE); // 發(fā)送地址 #define CC2500_READ_SINGLE 0x80
          while (!(IFG2 & UTXIFG1)); //等待發(fā)送地址完成
          IFG2 &= ~UTXIFG1; //清除標(biāo)志
          U1TXBUF = 0; //啟動(dòng)傳輸,以便讀取
          while (!(IFG2&URXIFG1)); //等待接收完成
          x = U1RXBUF; //讀取內(nèi)容
          while(!(IFG2 & UTXIFG1)); //等待 U1TXBUF = 0發(fā)送完成
          SPI_OUT |= CSn; //CS 禁止
          return x;
          }
          //突發(fā)方式讀cc2500寄存器
          void spi_ReadBurstReg(unsigned char addr, unsigned char *buffer, unsigned char count)
          {
          unsigned int i;
          SPI_OUT &= ~CSn; // CS使能
          while (SPI_IN & SOMI);// 等待芯片準(zhǔn)備好
          IFG2 &= ~UTXIFG1; //清除標(biāo)志
          U1TXBUF = (addr | CC2500_READ_BURST); //發(fā)送地址#define CC2500_READ_BURST 0xC0
          while (!(IFG2 & UTXIFG1)); //等待完成
          for (i = 0; i < count; i++)
          {
          U1TXBUF = 0;
          while (!(IFG2 & URXIFG1)); // 等待
          buffer[i] = U1RXBUF; // 接收
          while(!(IFG2 & UTXIFG1)); //等待 U1TXBUF = 0發(fā)送完成
          IFG2 &= ~UTXIFG1; //清除標(biāo)志
          }
          SPI_OUT |= CSn; //CS 禁止
          }
          //讀cc2500狀態(tài)
          unsigned char spi_ReadStatus(unsigned char addr)
          {
          unsigned char x;
          SPI_OUT &= ~CSn; // CS 使能
          while (SPI_IN & SOMI);// 等待cc2500準(zhǔn)備好
          IFG2 &= ~UTXIFG1; // 清除標(biāo)志
          U1TXBUF = (addr | CC2500_READ_SINGLE); // 發(fā)送地址 #define CC2500_READ_BURST 0x80
          while (!(IFG2 & UTXIFG1)); // 等待發(fā)送完成
          IFG2 &= ~UTXIFG1; // 清除標(biāo)志
          U1TXBUF = 0; // 啟動(dòng)傳輸
          while (!(IFG2&URXIFG1)); // 等待接收完成
          x = U1RXBUF; // 讀取數(shù)據(jù)
          while(!(IFG2 & UTXIFG1)); //等待 U1TXBUF = 0發(fā)送完成
          SPI_OUT |= CSn; // CS 禁止
          return x;
          }



          關(guān)鍵詞: msp430F149cc2500USART1SPI初始

          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();