本文來源電子發燒友社區,作者:xiaopeng, 帖子地址:https://bbs.elecfans.com/jishu_2287977_1_1.html
中科昊芯DSC2802x系列DSP擁有一個SCI(UART)模塊,可以用來作為調試口或者與其它模塊進行通訊。
其基本功能如下:
注意,這個sci模塊數據位是可配置為1~8bit,并非我們常見的8~9bit數據位。
還具有增強功能:
也就是說硬件可以自動檢測波特率,功能還是很強大的。
波特率計算公式:
代碼實操:
新建兩個文件,sci.c和sci.h
與sci相關的代碼全部放在sci.c文件里面,sci.h用于sci相關的函數的聲明。
1、sci模塊硬件初始化:
復制代碼
2、中斷方式的數據發送
復制代碼
3、字符串的發送
復制代碼
4、發送與接收中斷函數
復制代碼
5、主函數
在上一篇GPIO發布的基礎上增加sci功能,實現數據的收發,同時,led和按鍵功能也正常工作。
復制代碼
測試
測試成功
中科昊芯DSC2802x系列DSP擁有一個SCI(UART)模塊,可以用來作為調試口或者與其它模塊進行通訊。
![poYBAGKweKCAEEarAABJIOiQaAw743.jpg](https://file.elecfans.com/web2/M00/4C/0F/poYBAGKweKCAEEarAABJIOiQaAw743.jpg)
其基本功能如下:
![poYBAGKweSyAEr-MAADpQzRtbTY649.jpg](https://file.elecfans.com/web2/M00/4C/0F/poYBAGKweSyAEr-MAADpQzRtbTY649.jpg)
注意,這個sci模塊數據位是可配置為1~8bit,并非我們常見的8~9bit數據位。
還具有增強功能:
![pYYBAGKwedeAJvy7AAAUQ9XheyQ869.jpg](https://file.elecfans.com/web2/M00/4C/AB/pYYBAGKwedeAJvy7AAAUQ9XheyQ869.jpg)
也就是說硬件可以自動檢測波特率,功能還是很強大的。
波特率計算公式:
![poYBAGKweseAcfKiAACymDWu5ME019.jpg](https://file.elecfans.com/web2/M00/4C/10/poYBAGKweseAcfKiAACymDWu5ME019.jpg)
代碼實操:
新建兩個文件,sci.c和sci.h
![poYBAGKwe2OAMjW_AACEqWzwnyM468.jpg](https://file.elecfans.com/web2/M00/4C/10/poYBAGKwe2OAMjW_AACEqWzwnyM468.jpg)
與sci相關的代碼全部放在sci.c文件里面,sci.h用于sci相關的函數的聲明。
1、sci模塊硬件初始化:
- /******************************************************************
- *函數名:Scia_Config(uint32 baud)
- *參 數: baud,串口波特率
- *返回值:無
- *作 用: SCIA 初始化配置
- ******************************************************************/
- void Scia_Config(uint32 baud)
- {
- uint32 div = 0;
- uint32 divsel = 0;
- uint32 lospcp = 0;
- uint32 lspclk = 0;
- uint16 brr = 0;
- //獲取系統時鐘的倍頻、分頻和低速外部時鐘的值
- div = SysCtrlRegs.PLLCR.bit.DIV;
- divsel = SysCtrlRegs.PLLSTS.bit.DIVSEL;
- lospcp = SysCtrlRegs.LOSPCP.bit.LSPCLK;
- if (lospcp != 0)
- {
- lospcp = lospcp * 2;
- }
- else
- {
- lospcp = 1;
- }
- /*分頻值設置
- divsel為 0時,系統時鐘4分頻
- divsel為 1時,系統時鐘4分頻
- divsel為 2時,系統時鐘2分頻
- divsel為 3時,系統時鐘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 停止位設置 0:一個停止位 1:兩個停止位*/
- SciaRegs.SCICCR.bit.STOPBITS = 0;
- /*SCI 奇偶校驗位 0:奇偶校驗 1:偶偶校驗*/
- SciaRegs.SCICCR.bit.PARITY = 0;
- /*SCI 奇偶校驗使能 0:關閉 1:啟用*/
- SciaRegs.SCICCR.bit.PARITYENA = 0;
- /*SCI 字符長度 0:1個字長1:2個字長 ... 7:8個字長*/
- SciaRegs.SCICCR.bit.SCICHAR = 7;
- /*使能SCI的發送機和接收機*/
- 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 發送中斷使能*/
- SciaRegs.SCICTL2.bit.TXINTENA = 1;
- /*SCI 接收中斷使能*/
- SciaRegs.SCICTL2.bit.RXBKINTENA = 1;
- /*SCI 指定發送和接收中斷處理函數,該寄存器受EALLOW保護*/
- 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 軟件復位,重新啟動SCI*/
- SciaRegs.SCICTL1.bit.SWRESET = 1;
- }
2、中斷方式的數據發送
- /******************************************************************
- *函數名:Scia_Send(uint8 data)
- *參 數: data,準備發送的字節
- *返回值:無
- *作 用: SCIA 發送一個字節
- ******************************************************************/
- void Scia_Send(uint8 data)
- {
- while (SciaRegs.SCICTL2.bit.TXRDY == 0)
- {
- }
- SciaRegs.SCITXBUF = data;
- }
3、字符串的發送
- /******************************************************************
- *函數名:Scia_Print(char *str)
- *參 數: *str,要發送的字符串
- *返回值:無
- *作 用: SCIA 發送一個字符串
- ******************************************************************/
- void Scia_Print(char *str)
- {
- while (*str != '')
- {
- while (SciaRegs.SCICTL2.bit.TXRDY == 0)
- {
- }
- SciaRegs.SCITXBUF = *str++;
- }
- }
4、發送與接收中斷函數
- /******************************************************************
- *函數名:sciaTxIsr(void)
- *參 數: 無
- *返回值:無
- *作 用: SCIA中斷發送處理
- ******************************************************************/
- INTERRUPT void sciaTxIsr(void)
- {
- /*清除中斷標志位*/
- while (SciaRegs.SCICTL2.bit.TXRDY == 0)
- {
- }
- PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
- }
- /******************************************************************
- *函數名:sciaRxIsr(void)
- *參 數: 無
- *返回值:無
- *作 用: SCIA中斷接收處理
- ******************************************************************/
- INTERRUPT void sciaRxIsr(void)
- {
- if (SciaRegs.SCICTL2.bit.TXRDY == 1)
- {
- Scia_Send(SciaRegs.SCIRXBUF.bit.RXDT);
- PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
- }
- }
5、主函數
在上一篇GPIO發布的基礎上增加sci功能,實現數據的收發,同時,led和按鍵功能也正常工作。
- int main(void)
- {
- uint16_t cnt = 0;
- /*初始化系統控制:PLL,WatchDog,使能外設時鐘*/
- InitSysCtrl();
- /*初始化內存控制寄存器,使能內存流水線模式*/
- InitFlash();
- /*初始化串口通信的GPIO口*/
- /*GPIO28: SCIRXDA*/
- /*GPIO29: SCITXDA*/
- InitSciGpio();
- /*關閉中斷*/
- DINT;
- /*將PIE控制寄存器初始化為默認狀態,該狀態禁止所有PIE中斷并清除所有標志*/
- InitPieCtrl();
- /*禁止CPU中斷并清除所有中斷標志*/
- IER = 0x0000;
- IFR = 0x0000;
- /*初始化PIE向量表,為PIE向量表中的所有中斷向量配置對應向量的入口地址*/
- InitPieVectTable();
- /*SCI寄存器配置*/
- Scia_Config(9600);
- /*使能外部中斷和CPU中斷*/
- EINT;
- /*初始化KEY、LED*/
- InitKEY();
- InitLED();
- /*通過SCI發送字符串*/
- 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;
- }
測試
![poYBAGKwfUiAdZZhAABQ8zCgFcs967.jpg](https://file.elecfans.com/web2/M00/4C/10/poYBAGKwfUiAdZZhAABQ8zCgFcs967.jpg)
測試成功
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
中科昊芯
+關注
關注
5文章
73瀏覽量
5069 -
開發板試用
+關注
關注
3文章
299瀏覽量
1957
發布評論請先 登錄
相關推薦
【Start_DSC28034PNT湖人開發板免費體驗】Start_DSC28034PNT湖人開發板RS232 通信
Start_DSC28034PNT湖人開發板| 官網鏈接
[start28034湖人開發板_北京中科昊
發表于 09-12 12:34
【Start_DSC28034PNT湖人開發板免費體驗】Start_DSC28034PNT湖人開發板上電測試
Start_DSC28034PNT湖人開發板| 官網鏈接
[start28034湖人開發板_北京中科昊
發表于 09-12 12:09
【Start_DSC28034PNT湖人開發板免費體驗】Start_DSC28034PNT湖人開發板開箱視頻
| 官網鏈接
[start28034湖人開發板_北京中科昊芯科技有限公司]
官網圖片發布是這樣:
實物收到后有些出入:今天為大家介紹以下
發表于 08-23 00:17
【Start_DSC28034PNT湖人開發板免費體驗】Start_DSC28034PNT湖人開發板初體驗
官網鏈接
start28034湖人開發板_北京中科昊芯科技有限公司
官網圖片發布是這樣:
實物收到后有些出入:!
微信圖片_2023082
發表于 08-23 00:14
【Start_DSC28034PNT湖人開發板免費體驗】開發板使用4
接上文 【Start_DSC28034PNT湖人開發板免費體驗】開發板使用1和 【Start_DSC28034PNT湖人開發板免費體驗】
發表于 08-19 14:14
【Start_DSC28034PNT湖人開發板免費體驗】開發板使用2
接上文 【Start_DSC28034PNT湖人開發板免費體驗】開發板使用1
| # 導入工程選擇從下載的demo:H:\\\\武漢芯源CW32飯盒派\\\\
發表于 08-19 10:11
【Start_DSC28034PNT湖人開發板免費體驗】中科昊芯Start_DSC28034PNT PWM測試
中科昊芯Start_DSC28034PNT PWM測試
本次測試主要對PWM進行測試,嘗試使用DSP的PWM模塊完成呼吸燈控制功能。
一、硬件連接
通過原理圖可以看出,通過PWM控制呼
發表于 08-05 19:40
【Start_DSC28034PNT湖人開發板免費體驗】開發板使用1
提取碼:yjyx
| # 導入工程選擇從下載的demo:H:\\\\武漢芯源CW32飯盒派\\\\中科昊芯Start_DSC28034PN
發表于 08-04 18:10
【Start_DSC28034PNT湖人開發板免費體驗】+開箱+軟件
感謝 發燒友學院以及中科昊芯提供產品Start_DSC28034PNT湖人開發板
打開快遞封裝的外包裹袋,里面有2個盒子。打開后是
發表于 08-04 14:31
【Start_DSC28034PNT湖人開發板免費體驗】開發環境搭建
資源下載
總的資源,我放在自己的阿里云盤了,就是下面的三個地方的合集
中科昊芯Start_DSC28034PNT開發板
https://ww
發表于 07-30 16:27
【Start_DSC28034PNT湖人開發板免費體驗】(開源)控制機械臂小游戲3
【Start_DSC28034PNT湖人開發板免費體驗】定時器控制數字舵機
【Start_DSC28034PNT湖人開發板免費體驗】1初識中科
發表于 07-30 14:48
【Start_DSC28034PNT湖人開發板免費體驗】1初識中科昊芯
感謝 中科昊芯
感謝 電子發燒友社區
板子非常漂亮!
做工精良。
配套設施完善。
細節到位。
自研軟件。
界面優良。
發表于 07-18 00:52
【Start_DSC28034PNT湖人開發板免費體驗】中科昊芯Start_DSC28034PNT開箱測試
中科昊芯Start_DSC28034PNT開箱測試一、Haawking-IDE安裝與環境搭建1、 在中科
發表于 07-09 23:12
【Start_DSC28034PNT湖人開發板免費體驗】+兩種版本開發板的比較
從收集的資料及手頭的開發板來看Start_DSC28034PNT湖人開發板應有兩種版本,且存在的差異還比較大,為此對其加以相應的比較。
![【<b class='flag-5'>Start_DSC</b>28034PNT湖人<b class='flag-5'>開發板</b>免費體驗】+兩種版本<b class='flag-5'>開發板</b>的比較](https://file1.elecfans.com//web2/M00/8C/2A/wKgZomSmyGSADtMvAAEECNSEiFA122.jpg)
評論