硬件介紹:
SPI:SPI是Motorola首先在其MC68HCXX系列處理器上定義的,它是一種同步的高速串行通信協(xié)議,有關(guān)SPI協(xié)議的詳細(xì)內(nèi)容,參考:SPI_互動百科。
MSP430對SPI的支持:當(dāng)msp430USART模塊控制器UxCTL的位SYNC置位時,USART模塊工作于同步模式,對于149即工作于SPI模式,若是169,USART0可以支持I2C,可以通過另一控制位I2C控制,I2C位0則工作于SPI。在SPI模式下,允許單片機(jī)以確定的速率發(fā)送和接收7位或8位數(shù)據(jù)。
同步通信與異步通信類似;同步通信和異步通信寄存器資源一致,具體寄存器的不同位之間的功能存在差異;具體寄存器內(nèi)容參見TI提供的用戶指南。
USART模塊的SPI操作可以是3線和4線,其信號如下:
SIMO:從進(jìn)主出,主機(jī)模式下,數(shù)據(jù)輸出;從機(jī)模式下,數(shù)據(jù)輸入。
SOMI:從出主進(jìn),主機(jī)模式下,數(shù)據(jù)輸入;從機(jī)模式下,數(shù)據(jù)輸出。
UCLK:USART SPI模式時鐘,信號有主機(jī)輸出,從機(jī)輸入。
STE:從機(jī)模式發(fā)送接收允許控制腳,用于4線模式,控制多主從系統(tǒng)中多個從機(jī),避免發(fā)生沖突。具體方式如下(圖截自 用戶指南):四線主機(jī)模式:STE為高電平,SIMO和UCLK操作正常;STE為低電平,SIMO和UCLK被置為輸入方向,主機(jī)控制權(quán)讓出。
四線從機(jī)模式:STE為高電平,從機(jī)的發(fā)送和接收無效,且把SOMI置為輸入方向;STE為低電平,發(fā)送接收正常,SOMI也為正常輸出。USART模塊串行時鐘極性和相位設(shè)置:
USART的時鐘UCLK的極性和相位由位于UxTCTL寄存器的CKPH和CKPL位控制,具體如下圖:在程序中,我分別稱之為,時鐘模式0、時鐘模式1、時鐘模式2、時鐘模式3。
USART的波特率產(chǎn)生,SPI不同于異步通信:異步通信由UxBR1\UxBR0\UxMCTL三個寄存器控制,以產(chǎn)生標(biāo)準(zhǔn)頻率;而同步模式,主從設(shè)備用同一個時鐘,不再需要產(chǎn)生標(biāo)準(zhǔn)時鐘,故而不再用UxMCTL寄存器,設(shè)其值為0.
其他的,與異步通信基本一致,這里不再細(xì)說。具體參考用戶指南。
程序?qū)崿F(xiàn):
程序和異步通信方式類似:首先是初始化函數(shù),然后是讀取數(shù)據(jù)、寫入數(shù)據(jù)函數(shù)。此程序采用和我之前的UART程序庫類似的結(jié)構(gòu),寫入數(shù)據(jù)后進(jìn)入低功耗等待中斷,判斷標(biāo)志位進(jìn)行寫入數(shù)據(jù)和讀取數(shù)據(jù)。
這里函數(shù)只實(shí)現(xiàn)430的主機(jī)模式,如需從機(jī)模式可以仿照我的程序,進(jìn)行簡化實(shí)現(xiàn)。
由于,我即將使用的SPI設(shè)備(AD7708)不是字符型設(shè)備,這里不再實(shí)現(xiàn)寫入字符串函數(shù),也不再移植printf和scanf函數(shù),如若需要可以自己添加,printf和scanf的移植參考:MSP430程序庫<四>printf和scanf函數(shù)移植
初始化函數(shù):SpiMasterInit,實(shí)現(xiàn)主機(jī)模式的初始化工作,函數(shù)內(nèi)容如下:
char SpiMasterInit(long baud,char dataBits,char mode,char clkMode)
{
long int brclk; //波特率發(fā)生器時鐘頻率
UxCTL |= SWRST; //初始
//反饋選擇位,為1,發(fā)送的數(shù)被自己接收,用于測試,正常使用時注釋掉
//UxCTL |= LISTEN;
UxCTL |= SYNC + MM; //SPI 主機(jī)模式
//時鐘源設(shè)置
UxTCTL &=~ (SSEL0+SSEL1); //清除之前的時鐘設(shè)置
if(baud<=16364) //
{
UxTCTL |= SSEL0; //ACLK,降低功耗
brclk = 32768; //波特率發(fā)生器時鐘頻率=ACLK(32768)
}
else
{
UxTCTL |= SSEL1; //SMCLK,保證速度
brclk = 1000000; //波特率發(fā)生器時鐘頻率=SMCLK(1MHz)
}
//------------------------設(shè)置波特率-------------------------
if(baud < 300||baud > 115200) //波特率超出范圍
{
return 0;
}
//設(shè)置波特率寄存器
int fen = brclk / baud; //分頻系數(shù)
if(fen<2)return (0); //分頻系數(shù)必須大于2
else
{
UxBR0 = fen / 256;
UxBR1 = fen % 256;
}
//------------------------設(shè)置數(shù)據(jù)位-------------------------
switch(dataBits)
{
case 7:case'7': UxCTL &=~ CHAR; break; //7位數(shù)據(jù)
case 8:case'8': UxCTL |= CHAR; break; //8位數(shù)據(jù)
default : return(0); //參數(shù)錯誤
}
//------------------------設(shè)置模式---------------------------
switch(mode)
{
case 3:case'3': UxTCTL |= STC; USPI3ON; break; //三線模式
case 4:case'4': UxTCTL &=~ STC; USPI4ON; break; //四線模式
default : return(0); //參數(shù)錯誤
}
//------------------------設(shè)置UCLK模式-----------------------
switch(clkMode)
{
case 0:case'0': UxTCTL &=~ CKPH; UxTCTL &=~ CKPL; break; //模式0
case 1:case'1': UxTCTL &=~ CKPH; UxTCTL |= CKPL; break; //模式1
case 2:case'2': UxTCTL |= CKPH; UxTCTL &=~ CKPL; break; //模式2
case 3:case'3': UxTCTL |= CKPH; UxTCTL |= CKPL; break; //模式3
default : return(0); //參數(shù)錯誤
}
UxME |= USPIEx; //模塊使能
UCTL0 &= ~SWRST; // Initialize USART state machine
UxIE |= URXIEx + UTXIEx; // Enable USART0 RX interrupt
return(1); //設(shè)置成功
}
程序注釋已經(jīng)比較詳細(xì),這里不再細(xì)說;如果要改為從機(jī)模式,把時鐘設(shè)置和波特率設(shè)置去掉應(yīng)該就可以了。
發(fā)送函數(shù)和接收函數(shù):
void SpiWriteDat(char c)
{
while (TxFlag==0) SpiLpm(); // 等待上一字節(jié)發(fā)完,并休眠
TxFlag=0; //
UxTXBUF=c;
}
char SpiReadDat()
{
while (RxFlag==0) SpiLpm(); // 收到一字節(jié)?
RxFlag=0;
return(UxRXBUF);
}
發(fā)送和接收函數(shù)和異步通信里面的幾乎一樣,如果標(biāo)志位為0,則等待改變?yōu)?,然后寫入或讀出;標(biāo)志位在中斷函數(shù)里被更改;中斷函數(shù)如下:
#pragma vector=USARTxRX_VECTOR
__interrupt void UartRx()
{
RxFlag=1;
__low_power_mode_off_on_exit();
}
#pragma vector=USARTxTX_VECTOR
__interrupt void UartTx ()
{
TxFlag=1;
__low_power_mode_off_on_exit();
}
中斷里面僅僅置標(biāo)志位后,就退出低功耗;退出后即寫入或者讀取數(shù)據(jù)。
讀取或?qū)懭牒瘮?shù)調(diào)用的SpiLpm函數(shù):
void SpiLpm()
{
if(UxTCTL&SSEL0) LPM3; //若以ACLK 作時鐘,進(jìn)入LPM3休眠(僅打開ACLK)
else LPM0; //若以SMCLK作時鐘,進(jìn)入LPM0休眠(不關(guān)閉SMCLK)
}
根據(jù)不同情況進(jìn)入低功耗,如果單片機(jī)其他地方不允許進(jìn)入低功耗,可以更改這個函數(shù)。
程序部分就這么多了。需要的函數(shù)在頭文件里面聲明,方便使用。
使用示例:
程序使用方式和之前的程序庫相同,加入c文件,包含h文件,調(diào)用初始化函數(shù)后即可掉用程序庫中的函數(shù)。
#include "msp430x16x.h" //430寄存器頭文件
#include "Spi.h" //串口通訊程序庫頭文件
void main()
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
ClkInit();
// 主機(jī)模式,波特率25000,8位數(shù)據(jù)位,三線模式,時鐘模式0(具體見spi.c)
SpiMasterInit(25000,8,3,0);
_EINT();
while(1) //串口測試
{
SpiWriteDat(0X20);
char a = SpiReadDat();
}
}
這里只是一個簡單的使用示例,詳細(xì)的使用,將會在下一篇給出,下一篇:MSP430程序庫<六>通過SPI操作AD7708;將會使用今天的程序庫,完成SPI的通信部分。
注意事項:
SPI是全雙工通信,每次寫入(發(fā)送)8位/7位數(shù)據(jù)的同時,430的SPI主模塊都會在發(fā)送后半個時鐘周期讀取采樣的0/1信號,存入接收緩沖寄存器,所以,每次的寫入,均有數(shù)據(jù)讀取,但不一定是從設(shè)備發(fā)送回來的,這個地方在使用430主機(jī)模式的時候必須注意,很容易出錯(我也是在調(diào)試AD7708的時候才注意到這個地方的);SPI的函數(shù)已經(jīng)添加SpiWriteData函數(shù),這個函數(shù)會在發(fā)送的同時返回發(fā)送完成半個時鐘周期后的接收到的數(shù)據(jù),方便使用;不建議使用前面的發(fā)送和讀取函數(shù),很容易出錯;建議使用剛添加的這個函數(shù),程序庫已經(jīng)更新,可以重新下載。函數(shù)SpiWriteData:
char SpiWriteData(char c)
{
SpiWriteDat(c);
return SpiReadDat();
}
發(fā)送后讀取即可,程序比較簡單。
新的示例程序:
void main()
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
ClkInit();
// 主機(jī)模式,波特率25000,8位數(shù)據(jù)位,三線模式,時鐘模式0(具體見spi.c)
SpiMasterInit(25000,8,3,0);
_EINT();
while(1) //串口測試
{
SpiWriteData(0X20); //只寫入
char a = SpiWriteData(0xff); //只讀取
}
}
上一篇:MSP430 開發(fā)注意事項要求
下一篇:MSP430 移植printf和scanf
推薦閱讀
史海拾趣
Crocus公司成立于XXXX年,是一家專注于先進(jìn)隧道磁阻(TMR)傳感器技術(shù)的研發(fā)與生產(chǎn)的企業(yè)。創(chuàng)立初期,公司面臨著資金緊張、技術(shù)壁壘等重重困難。然而,憑借創(chuàng)始團(tuán)隊對TMR技術(shù)的深刻理解和堅定信念,Crocus逐漸在行業(yè)中嶄露頭角。他們不斷投入研發(fā),優(yōu)化產(chǎn)品性能,為后續(xù)的快速發(fā)展奠定了堅實(shí)的基礎(chǔ)。
在自動駕駛技術(shù)快速發(fā)展的同時,AURORA公司也積極尋找商業(yè)化突破口。公司創(chuàng)始人認(rèn)為,自動駕駛卡車商業(yè)化是一個具有巨大潛力的市場。因此,AURORA優(yōu)先瞄準(zhǔn)了自動駕駛卡車商業(yè)化領(lǐng)域,與FedEx、Paccar、Schneider、Werner和Xpress等多家平臺公司建立了試點(diǎn)合作關(guān)系。通過在實(shí)際場景中測試和驗(yàn)證自動駕駛技術(shù),AURORA不斷積累經(jīng)驗(yàn)和數(shù)據(jù),為未來的商業(yè)化落地奠定了堅實(shí)基礎(chǔ)。
這五個故事展示了AURORA公司在電子行業(yè)中的發(fā)展歷程和取得的成就。從初創(chuàng)時期的挑戰(zhàn)與機(jī)遇到技術(shù)實(shí)力的不斷提升,再到與汽車制造商的深度合作、垂直產(chǎn)業(yè)鏈的整合與布局以及自動駕駛卡車商業(yè)化的探索,AURORA公司憑借其卓越的技術(shù)實(shí)力和前瞻性的戰(zhàn)略眼光,在電子行業(yè)中逐漸嶄露頭角。未來,我們有理由相信AURORA將繼續(xù)在自動駕駛領(lǐng)域取得更多突破和創(chuàng)新。
隨著全球環(huán)保意識的提高,Bkc積極響應(yīng)綠色發(fā)展的號召。公司不僅加大了對環(huán)保技術(shù)和綠色生產(chǎn)的投入,還積極參與社會公益事業(yè)和環(huán)保活動。通過實(shí)際行動履行企業(yè)社會責(zé)任,Bkc不僅贏得了社會的尊重和支持,也為公司的可持續(xù)發(fā)展注入了新的動力。
這些故事框架是基于一般性的電子行業(yè)和公司發(fā)展邏輯構(gòu)建的,并不代表Bkc Semiconductors Inc公司的真實(shí)情況。如果您需要更具體、更準(zhǔn)確的信息,建議直接查閱該公司的官方網(wǎng)站、年報或相關(guān)新聞報道。
芯佰微始終將品質(zhì)管理作為公司的核心工作之一。公司建立了嚴(yán)格的質(zhì)量管理體系,從原材料采購到產(chǎn)品生產(chǎn)、測試、包裝等各個環(huán)節(jié)都進(jìn)行嚴(yán)格的質(zhì)量控制。同時,芯佰微也非常注重客戶服務(wù),始終將客戶的需求放在首位,及時解決客戶在使用過程中遇到的問題。這些措施使得芯佰微贏得了客戶的廣泛信任和好評。
在汽車電子領(lǐng)域,AEC-Q100品質(zhì)認(rèn)證是衡量MCU產(chǎn)品質(zhì)量的重要標(biāo)準(zhǔn)。芯旺微電子通過不懈的努力和技術(shù)創(chuàng)新,成功研發(fā)出滿足AEC-Q100品質(zhì)認(rèn)證的MCU產(chǎn)品,并廣泛應(yīng)用于汽車前裝市場。這一突破不僅證明了芯旺微電子的技術(shù)實(shí)力,也為其贏得了國內(nèi)外眾多知名汽車廠商的信賴和合作。
芯旺微電子自2012年成立以來,始終致力于高可靠性MCU器件的研發(fā)設(shè)計。公司憑借其自主研發(fā)的KungFu內(nèi)核架構(gòu)處理器,迅速在汽車級和工業(yè)級混合信號MCU領(lǐng)域嶄露頭角。隨著技術(shù)的不斷積累和市場的深入拓展,芯旺微電子逐漸從一家初創(chuàng)公司發(fā)展成為國內(nèi)車規(guī)級MCU市場的領(lǐng)軍企業(yè)。
應(yīng)用技巧/單片機(jī)系統(tǒng)中的紅外通信接口 本文結(jié)合復(fù)費(fèi)率電能表中紅外通信的設(shè)計實(shí)從事貿(mào)易,介紹了單片機(jī)系統(tǒng)中紅外通信的軟硬件設(shè)計方法,并給出了具體的電路原理和通信源程序。… 查看全部問答∨ |
|
DSP Group and Lantiq Complete Interoperability Testing DSP Group and Lantiq Complete Interoperability Testing for Home Gateways and Digital Cordless Handsets DSP Group, Inc™, a leading global provider of wireless chipset solutions for converged communication ...… 查看全部問答∨ |
|
我的硬件是PXA270 通過16位數(shù)據(jù)總線連接到64MBYTE的FLASH P33,地址總線是26位 p33是由兩塊32M的flash組成的,在程序中不能同時訪問上下兩塊FLASH的地址 而是需要有一個地址總線,即最高位的A25作為內(nèi)部片選,選擇當(dāng)前訪問的是BOTTOM 還是top flas ...… 查看全部問答∨ |
幾個月前新買電腦總是無故死機(jī),請教高手? 相關(guān)癥狀如下: 1.畫面定格,除非重啟或關(guān)機(jī),其它一切操作均無效,沒有一點(diǎn)反應(yīng)。 2.玩反恐等游戲時死機(jī)頻率大約一個半小時一次;放電影大約四小時一次。第一次開機(jī)到死 ...… 查看全部問答∨ |
采用TI C2000開發(fā)的太陽能逆變器(一)-TI技術(shù)研討會 基于 C2000 和 Piccolo MCU的新型太陽能套件,助力打造更環(huán)保世界。該新型太陽能套件為可再生能源市場提供先進(jìn)外設(shè)、針對應(yīng)用的開發(fā)硬件、原理圖 (schematics)、全面豐富的軟件算法庫和業(yè)界領(lǐng)先的開發(fā)環(huán)境,使設(shè)計人員能簡易地開發(fā)太陽能逆變器設(shè)計 ...… 查看全部問答∨ |
前文提到,對希望對 電纜損耗進(jìn)行補(bǔ)償?shù)墓こ處煟麄冊跍y量和表征同軸電纜的時,可能選擇不同方法。到目前為止,這些方法包括矢量網(wǎng)絡(luò)分析儀(VNA)、時域反射計 (TDR)、以及仿真工具(如 ADS之類的),方法各異,但共同點(diǎn)都是得到電纜的S參數(shù) ...… 查看全部問答∨ |
AD采集的數(shù)據(jù)通過FPGA控制SRAM存儲后再由PCI傳輸?shù)缴衔粰C(jī),16K數(shù)據(jù)長度,但是采集上來的數(shù)據(jù)幅度不一致,請問是怎么回事?… 查看全部問答∨ |
這是本人在淘寶上購得的FPGA開發(fā)板的地址,http://item.taobao.com/item.htm?spm=a230r.1.10.12.XBn1Ov&id=13851235569,內(nèi)有詳細(xì)內(nèi)容,可供大家了解,由于個人原因,買后一直沒用過,可以說是全新的,現(xiàn)在要畢業(yè)實(shí)習(xí)離校了,想低價出售,個人的理 ...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級數(shù)字信號控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- 480Wh/kg!湖南久森半固態(tài)金屬鋰負(fù)極電池即將量產(chǎn)
- 中國首條硫化物固體電解質(zhì)量產(chǎn)線正式落地
- QUT開發(fā)出新的LENS系統(tǒng) 可以讓機(jī)器人進(jìn)行類似大腦的導(dǎo)航
- 毫米波雷達(dá)裝機(jī)量分析:毫米波雷達(dá)裝車量持續(xù)攀升,大陸和博世占據(jù)60%以上市場份額
- TDK推出適用于車載濾波器的同軸電纜供電電感器
- 大摩給“人形機(jī)器人100”清單注入新思路
- 行家預(yù)判:2025年車載Mini LED反超OLED
- 2025數(shù)智未來峰會:深度解讀AI賦能工業(yè)的趨勢與實(shí)踐
- 工業(yè)自動化中的Raspberry Pi:簡化經(jīng)濟(jì)實(shí)惠的邊緣計算
- 意法半導(dǎo)體宣布擴(kuò)大在新加坡的“Lab-in-Fab”廠內(nèi)實(shí)驗(yàn)室合作項目
- 【瓜分2500元紅包】票選2024 DigiKey “感知萬物,樂享生活”創(chuàng)意大賽人氣作品TOP3!
- 995美元Spartan6開發(fā)板,花落誰家?
- 【EE團(tuán)】開搶啦!!!TI超值工業(yè)級模擬器件套裝芯片再次登場!!!
- 電路圖站2.0版上線,公開征集網(wǎng)友建議,填寫調(diào)查問卷贏積分!
- 圍讀 《嵌入式軟件的時間分析》——汽車行業(yè)領(lǐng)域的嵌入式軟件理論、分析及實(shí)踐
- 【開工大吉,搶樓有禮】聊一聊你感興趣的技術(shù)和板子
- 【EEWORLD第八屆社區(qū)明星人物】10月明星人物
- 【備戰(zhàn)國賽】超多電賽干貨資料等你下載!蓋樓助力電賽贏積分
- STM32CubeMX(Keil5)開發(fā)之路——5定時器中斷TIM
- 加快企業(yè)的數(shù)字化建設(shè) 英特爾推出5款最新精選解決方案
- 降低車載網(wǎng)絡(luò)設(shè)計復(fù)雜性 TI汽車系統(tǒng)基礎(chǔ)芯片發(fā)布
- STM32CubeMX(Keil5)開發(fā)之路——6外部中斷
- STM32CubeMX(Keil5)開發(fā)之路——8Flash讀寫
- 基于TinyOS的嵌入式無線傳感器網(wǎng)絡(luò)設(shè)計
- 高亮度LED照明的驅(qū)動電路 — 電路圖天天讀(32)
- 可充電觸屏遙控模塊電路設(shè)計
- Zigbee協(xié)議與USB主機(jī)無線音箱電路設(shè)計
- 汽車半導(dǎo)體市場對高性能存儲的應(yīng)用要求