本文來源電子發(fā)燒友社區(qū),作者:xiaopeng, 帖子地址:https://bbs.elecfans.com/jishu_2287977_1_1.html
中科昊芯DSC2802x系列DSP擁有一個SCI(UART)模塊,可以用來作為調(diào)試口或者與其它模塊進(jìn)行通訊。
其基本功能如下:
注意,這個sci模塊數(shù)據(jù)位是可配置為1~8bit,并非我們常見的8~9bit數(shù)據(jù)位。
還具有增強(qiáng)功能:
也就是說硬件可以自動檢測波特率,功能還是很強(qiáng)大的。
波特率計算公式:
代碼實操:
新建兩個文件,sci.c和sci.h
與sci相關(guān)的代碼全部放在sci.c文件里面,sci.h用于sci相關(guān)的函數(shù)的聲明。
1、sci模塊硬件初始化:
復(fù)制代碼
2、中斷方式的數(shù)據(jù)發(fā)送
復(fù)制代碼
3、字符串的發(fā)送
復(fù)制代碼
4、發(fā)送與接收中斷函數(shù)
復(fù)制代碼
5、主函數(shù)
在上一篇GPIO發(fā)布的基礎(chǔ)上增加sci功能,實現(xiàn)數(shù)據(jù)的收發(fā),同時,led和按鍵功能也正常工作。
復(fù)制代碼
測試
測試成功
中科昊芯DSC2802x系列DSP擁有一個SCI(UART)模塊,可以用來作為調(diào)試口或者與其它模塊進(jìn)行通訊。
其基本功能如下:
注意,這個sci模塊數(shù)據(jù)位是可配置為1~8bit,并非我們常見的8~9bit數(shù)據(jù)位。
還具有增強(qiáng)功能:
也就是說硬件可以自動檢測波特率,功能還是很強(qiáng)大的。
波特率計算公式:
代碼實操:
新建兩個文件,sci.c和sci.h
與sci相關(guān)的代碼全部放在sci.c文件里面,sci.h用于sci相關(guān)的函數(shù)的聲明。
1、sci模塊硬件初始化:
- /******************************************************************
- *函數(shù)名:Scia_Config(uint32 baud)
- *參 數(shù): baud,串口波特率
- *返回值:無
- *作 用: SCIA 初始化配置
- ******************************************************************/
- void Scia_Config(uint32 baud)
- {
- uint32 div = 0;
- uint32 divsel = 0;
- uint32 lospcp = 0;
- uint32 lspclk = 0;
- uint16 brr = 0;
- //獲取系統(tǒng)時鐘的倍頻、分頻和低速外部時鐘的值
- div = SysCtrlRegs.PLLCR.bit.DIV;
- divsel = SysCtrlRegs.PLLSTS.bit.DIVSEL;
- lospcp = SysCtrlRegs.LOSPCP.bit.LSPCLK;
- if (lospcp != 0)
- {
- lospcp = lospcp * 2;
- }
- else
- {
- lospcp = 1;
- }
- /*分頻值設(shè)置
- divsel為 0時,系統(tǒng)時鐘4分頻
- divsel為 1時,系統(tǒng)時鐘4分頻
- divsel為 2時,系統(tǒng)時鐘2分頻
- divsel為 3時,系統(tǒng)時鐘1分頻*/
- switch (divsel)
- {
- case 0:
- case 1:
- lspclk = 12000000 * div / 4 / lospcp;
- break;
- case 2:
- lspclk = 12000000 * div / 2 / lospcp;
- break;
- case 3:
- lspclk = 12000000 * div / 1 / lospcp;
- break;
- }
- brr = lspclk / (baud * 8) - 1;
- /*SCI 停止位設(shè)置 0:一個停止位 1:兩個停止位*/
- SciaRegs.SCICCR.bit.STOPBITS = 0;
- /*SCI 奇偶校驗位 0:奇偶校驗 1:偶偶校驗*/
- SciaRegs.SCICCR.bit.PARITY = 0;
- /*SCI 奇偶校驗使能 0:關(guān)閉 1:啟用*/
- SciaRegs.SCICCR.bit.PARITYENA = 0;
- /*SCI 字符長度 0:1個字長1:2個字長 ... 7:8個字長*/
- SciaRegs.SCICCR.bit.SCICHAR = 7;
- /*使能SCI的發(fā)送機(jī)和接收機(jī)*/
- SciaRegs.SCICTL1.bit.TXENA = 1;
- SciaRegs.SCICTL1.bit.RXENA = 1;
- /*SCI 16位波特率選擇寄存器 高8位*/
- SciaRegs.SCIHBAUD = (uint8) ((brr >> 8) & 0xff);
- /*SCI 16位波特率選擇寄存器 低8位*/
- SciaRegs.SCILBAUD = (uint8) (brr & 0xff);
- /*SCI 發(fā)送中斷使能*/
- SciaRegs.SCICTL2.bit.TXINTENA = 1;
- /*SCI 接收中斷使能*/
- SciaRegs.SCICTL2.bit.RXBKINTENA = 1;
- /*SCI 指定發(fā)送和接收中斷處理函數(shù),該寄存器受EALLOW保護(hù)*/
- EALLOW;
- PieVectTable.SCIRXINTA = &sciaRxIsr;
- PieVectTable.SCITXINTA = &sciaTxIsr;
- EDIS;
- /*PIE Group 9, SCIRXINTA*/
- PieCtrlRegs.PIEIER9.bit.INTx1 = 1;
- /*PIE Group 9, SCITXINTA*/
- PieCtrlRegs.PIEIER9.bit.INTx2 = 1;
- IER_ENABLE(M_INT9);
- /*SCI 軟件復(fù)位,重新啟動SCI*/
- SciaRegs.SCICTL1.bit.SWRESET = 1;
- }
2、中斷方式的數(shù)據(jù)發(fā)送
- /******************************************************************
- *函數(shù)名:Scia_Send(uint8 data)
- *參 數(shù): data,準(zhǔn)備發(fā)送的字節(jié)
- *返回值:無
- *作 用: SCIA 發(fā)送一個字節(jié)
- ******************************************************************/
- void Scia_Send(uint8 data)
- {
- while (SciaRegs.SCICTL2.bit.TXRDY == 0)
- {
- }
- SciaRegs.SCITXBUF = data;
- }
3、字符串的發(fā)送
- /******************************************************************
- *函數(shù)名:Scia_Print(char *str)
- *參 數(shù): *str,要發(fā)送的字符串
- *返回值:無
- *作 用: SCIA 發(fā)送一個字符串
- ******************************************************************/
- void Scia_Print(char *str)
- {
- while (*str != '')
- {
- while (SciaRegs.SCICTL2.bit.TXRDY == 0)
- {
- }
- SciaRegs.SCITXBUF = *str++;
- }
- }
4、發(fā)送與接收中斷函數(shù)
- /******************************************************************
- *函數(shù)名:sciaTxIsr(void)
- *參 數(shù): 無
- *返回值:無
- *作 用: SCIA中斷發(fā)送處理
- ******************************************************************/
- INTERRUPT void sciaTxIsr(void)
- {
- /*清除中斷標(biāo)志位*/
- while (SciaRegs.SCICTL2.bit.TXRDY == 0)
- {
- }
- PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
- }
- /******************************************************************
- *函數(shù)名:sciaRxIsr(void)
- *參 數(shù): 無
- *返回值:無
- *作 用: SCIA中斷接收處理
- ******************************************************************/
- INTERRUPT void sciaRxIsr(void)
- {
- if (SciaRegs.SCICTL2.bit.TXRDY == 1)
- {
- Scia_Send(SciaRegs.SCIRXBUF.bit.RXDT);
- PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
- }
- }
5、主函數(shù)
在上一篇GPIO發(fā)布的基礎(chǔ)上增加sci功能,實現(xiàn)數(shù)據(jù)的收發(fā),同時,led和按鍵功能也正常工作。
- int main(void)
- {
- uint16_t cnt = 0;
- /*初始化系統(tǒng)控制:PLL,WatchDog,使能外設(shè)時鐘*/
- InitSysCtrl();
- /*初始化內(nèi)存控制寄存器,使能內(nèi)存流水線模式*/
- InitFlash();
- /*初始化串口通信的GPIO口*/
- /*GPIO28: SCIRXDA*/
- /*GPIO29: SCITXDA*/
- InitSciGpio();
- /*關(guān)閉中斷*/
- DINT;
- /*將PIE控制寄存器初始化為默認(rèn)狀態(tài),該狀態(tài)禁止所有PIE中斷并清除所有標(biāo)志*/
- InitPieCtrl();
- /*禁止CPU中斷并清除所有中斷標(biāo)志*/
- IER = 0x0000;
- IFR = 0x0000;
- /*初始化PIE向量表,為PIE向量表中的所有中斷向量配置對應(yīng)向量的入口地址*/
- InitPieVectTable();
- /*SCI寄存器配置*/
- Scia_Config(9600);
- /*使能外部中斷和CPU中斷*/
- EINT;
- /*初始化KEY、LED*/
- InitKEY();
- InitLED();
- /*通過SCI發(fā)送字符串*/
- Scia_Print("Hello haawking!rn");
- while(1)
- {
- /*按鍵按下*/
- if(GpioDataRegs.GPADAT.bit.GPIO12 == 0)
- {
- /*D400亮*/
- GpioDataRegs.GPACLEAR.bit.GPIO7 = 1;
- }
- else
- {
- /*松開按鍵D400滅*/
- GpioDataRegs.GPASET.bit.GPIO7 = 1;
- }
- if(cnt == 500)
- {
- cnt = 0;
- /*D401一直閃爍*/
- GpioDataRegs.GPATOGGLE.bit.GPIO6 = 1;
- }
- else
- {
- cnt++;
- DELAY_US(1000);
- }
- }
- return 0;
- }
測試
測試成功
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
中科昊芯
+關(guān)注
關(guān)注
5文章
80瀏覽量
5190 -
開發(fā)板試用
+關(guān)注
關(guān)注
3文章
301瀏覽量
2121
發(fā)布評論請先 登錄
相關(guān)推薦
有獎丨米爾 全志T536開發(fā)板免費試用
米爾與全志合作發(fā)布的新品基于全志T536應(yīng)用處理器的MYD-LT536-GK開發(fā)板免費試用活動來啦~~米爾提供了3塊價值750元的MYD-LT536-GK開發(fā)板發(fā)起試用活動您不僅可以免
【RA-Eco-RA4E2-64PIN-V1.0開發(fā)板試用】02、UART串口通信
調(diào)試信息。
所以,為了方便后續(xù)調(diào)試,在這一節(jié)中,學(xué)習(xí)使用FSP庫進(jìn)行UART串口通信。
1 硬件部分
從RA-Eco-RA4E2-64PIN-V1.0開發(fā)板的原理圖可以知道,這塊板子使用CH340N
發(fā)表于 12-14 11:44
瑞芯微主板/開發(fā)板Linux系統(tǒng)播放音頻方法,觸覺智能RK3562開發(fā)板演示
本文介紹瑞芯微方案主板/開發(fā)板Linux系統(tǒng)播放音頻的方法,觸覺智能RK3562開發(fā)板演示,通用RK3566、RK3568、RK3588等
追加名額丨米爾瑞芯微RK3576開發(fā)板有獎試用
米爾與瑞芯微合作發(fā)布的新品基于瑞芯微RK3576應(yīng)用處理器的MYD-LR3576開發(fā)板免費試用活動加碼啦~~米爾追加了2塊價值849元的MYD-LR3576
有獎丨米爾 瑞芯微RK3576開發(fā)板免費試用
米爾與瑞芯微合作發(fā)布的新品基于瑞芯微RK3576應(yīng)用處理器的MYD-LR3576開發(fā)板免費試用活動來啦~~米爾提供了7塊價值849元的MYD-LR3576
【RA-Eco-RA2E1-48PIN-V1.0開發(fā)板試用】開箱點燈
【RA-Eco-RA2E1-48PIN-V1.0開發(fā)板試用】開箱點燈
0. 寫在前面
在此,衷心感謝電子發(fā)燒友平臺和瑞薩提供的免費試用名額,讓我有機(jī)會體驗和評估
發(fā)表于 10-26 22:47
在NXP源碼基礎(chǔ)上如何適配ELF 1開發(fā)板的UART功能
UART即通用異步收發(fā)器,是一種支持全雙工串行通信協(xié)議的接口。在i.MX6ULL處理器平臺上,該處理器原生支持多達(dá)8路的UART接口,提供了豐富的串行通信能力。 針對ELF 1開發(fā)板,實際引出了4路
ElfBoard技術(shù)貼|如何在NXP源碼基礎(chǔ)上適配ELF 1開發(fā)板的UART功能
UART即通用異步收發(fā)器,是一種支持全雙工串行通信協(xié)議的接口。在i.MX6ULL處理器平臺上,該處理器原生支持多達(dá)8路的UART接口,提供了豐富的串行通信能力。
針對ELF 1開發(fā)板,實際引出
喜報!中科昊芯榮獲國家級專精特新“小巨人”企業(yè)稱號
喜訊!近日,國家工業(yè)和信息化部門正式揭曉了第六批國家專精特新“小巨人”企業(yè)名單,中科昊芯憑借卓越的技術(shù)實力和創(chuàng)新能力,榮獲了專精特新“小巨人”企業(yè)殊榮。這一榮譽(yù)不僅是對中科
點擊參與米爾NXP i.MX 93開發(fā)板有獎試用
米爾與NXP合作發(fā)布的新品基于NXPi.MX93應(yīng)用處理器的MYD-LMX9X開發(fā)板免費試用活動來啦~~米爾提供了3塊價值678元的MYD-LMX9X開發(fā)板發(fā)起試用活動您不僅可以免費體
免費!NXP i.MX 93開發(fā)板有獎試用
米爾與NXP合作發(fā)布的新品基于NXPi.MX93應(yīng)用處理器的MYD-LMX9X開發(fā)板免費試用活動來啦~~米爾提供了2塊價值678
評論