0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【中科昊芯Start_DSC28027勇士开发板试用体验】SCI(UART)通讯

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-11-21 11:14 次阅读
本文来源电子发烧友社区,作者:xiaopeng, 帖子地址:https://bbs.elecfans.com/jishu_2287977_1_1.html

中科昊芯DSC2802x系列DSP拥有一个SCI(UART)模块,可以用来作为调试口或者与其它模块进行通讯。

poYBAGKweKCAEEarAABJIOiQaAw743.jpg


其基本功能如下:
poYBAGKweSyAEr-MAADpQzRtbTY649.jpg


注意,这个sci模块数据位是可配置为1~8bit,并非我们常见的8~9bit数据位。
还具有增强功能:
pYYBAGKwedeAJvy7AAAUQ9XheyQ869.jpg

也就是说硬件可以自动检测波特率,功能还是很强大的。

波特率计算公式:
poYBAGKweseAcfKiAACymDWu5ME019.jpg


代码实操:
新建两个文件,sci.c和sci.h
poYBAGKwe2OAMjW_AACEqWzwnyM468.jpg


与sci相关的代码全部放在sci.c文件里面,sci.h用于sci相关的函数的声明。

1、sci模块硬件初始化:


  1. /******************************************************************
  2. *函数名:Scia_Config(uint32 baud)
  3. *参 数: baud,串口波特率
  4. *返回值:无
  5. *作 用: SCIA 初始化配置
  6. ******************************************************************/
  7. void Scia_Config(uint32 baud)
  8. {
  9. uint32 div = 0;
  10. uint32 divsel = 0;
  11. uint32 lospcp = 0;
  12. uint32 lspclk = 0;
  13. uint16 brr = 0;
  14. //获取系统时钟的倍频、分频和低速外部时钟的值
  15. div = SysCtrlRegs.PLLCR.bit.DIV;
  16. divsel = SysCtrlRegs.PLLSTS.bit.DIVSEL;
  17. lospcp = SysCtrlRegs.LOSPCP.bit.LSPCLK;
  18. if (lospcp != 0)
  19. {
  20. lospcp = lospcp * 2;
  21. }
  22. else
  23. {
  24. lospcp = 1;
  25. }
  26. /*分频值设置
  27. divsel为 0时,系统时钟4分频
  28. divsel为 1时,系统时钟4分频
  29. divsel为 2时,系统时钟2分频
  30. divsel为 3时,系统时钟1分频*/
  31. switch (divsel)
  32. {
  33. case 0:
  34. case 1:
  35. lspclk = 12000000 * div / 4 / lospcp;
  36. break;
  37. case 2:
  38. lspclk = 12000000 * div / 2 / lospcp;
  39. break;
  40. case 3:
  41. lspclk = 12000000 * div / 1 / lospcp;
  42. break;
  43. }
  44. brr = lspclk / (baud * 8) - 1;
  45. /*SCI 停止位设置 0:一个停止位 1:两个停止位*/
  46. SciaRegs.SCICCR.bit.STOPBITS = 0;
  47. /*SCI 奇偶校验位 0:奇偶校验 1:偶偶校验*/
  48. SciaRegs.SCICCR.bit.PARITY = 0;
  49. /*SCI 奇偶校验使能 0:关闭 1:启用*/
  50. SciaRegs.SCICCR.bit.PARITYENA = 0;
  51. /*SCI 字符长度 0:1个字长1:2个字长 ... 7:8个字长*/
  52. SciaRegs.SCICCR.bit.SCICHAR = 7;
  53. /*使能SCI的发送机和接收机*/
  54. SciaRegs.SCICTL1.bit.TXENA = 1;
  55. SciaRegs.SCICTL1.bit.RXENA = 1;
  56. /*SCI 16位波特率选择寄存器 高8位*/
  57. SciaRegs.SCIHBAUD = (uint8) ((brr >> 8) & 0xff);
  58. /*SCI 16位波特率选择寄存器 低8位*/
  59. SciaRegs.SCILBAUD = (uint8) (brr & 0xff);
  60. /*SCI 发送中断使能*/
  61. SciaRegs.SCICTL2.bit.TXINTENA = 1;
  62. /*SCI 接收中断使能*/
  63. SciaRegs.SCICTL2.bit.RXBKINTENA = 1;
  64. /*SCI 指定发送和接收中断处理函数,该寄存器受EALLOW保护*/
  65. EALLOW;
  66. PieVectTable.SCIRXINTA = &sciaRxIsr;
  67. PieVectTable.SCITXINTA = &sciaTxIsr;
  68. EDIS;
  69. /*PIE Group 9, SCIRXINTA*/
  70. PieCtrlRegs.PIEIER9.bit.INTx1 = 1;
  71. /*PIE Group 9, SCITXINTA*/
  72. PieCtrlRegs.PIEIER9.bit.INTx2 = 1;
  73. IER_ENABLE(M_INT9);
  74. /*SCI 软件复位,重新启动SCI*/
  75. SciaRegs.SCICTL1.bit.SWRESET = 1;
  76. }
复制代码


2、中断方式的数据发送


  1. /******************************************************************
  2. *函数名:Scia_Send(uint8 data)
  3. *参 数: data,准备发送的字节
  4. *返回值:无
  5. *作 用: SCIA 发送一个字节
  6. ******************************************************************/
  7. void Scia_Send(uint8 data)
  8. {
  9. while (SciaRegs.SCICTL2.bit.TXRDY == 0)
  10. {
  11. }
  12. SciaRegs.SCITXBUF = data;
  13. }
复制代码


3、字符串的发送


  1. /******************************************************************
  2. *函数名:Scia_Print(char *str)
  3. *参 数: *str,要发送的字符串
  4. *返回值:无
  5. *作 用: SCIA 发送一个字符串
  6. ******************************************************************/
  7. void Scia_Print(char *str)
  8. {
  9. while (*str != '')
  10. {
  11. while (SciaRegs.SCICTL2.bit.TXRDY == 0)
  12. {
  13. }
  14. SciaRegs.SCITXBUF = *str++;
  15. }
  16. }
复制代码


4、发送与接收中断函数


  1. /******************************************************************
  2. *函数名:sciaTxIsr(void)
  3. *参 数: 无
  4. *返回值:无
  5. *作 用: SCIA中断发送处理
  6. ******************************************************************/
  7. INTERRUPT void sciaTxIsr(void)
  8. {
  9. /*清除中断标志位*/
  10. while (SciaRegs.SCICTL2.bit.TXRDY == 0)
  11. {
  12. }
  13. PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
  14. }
  15. /******************************************************************
  16. *函数名:sciaRxIsr(void)
  17. *参 数: 无
  18. *返回值:无
  19. *作 用: SCIA中断接收处理
  20. ******************************************************************/
  21. INTERRUPT void sciaRxIsr(void)
  22. {
  23. if (SciaRegs.SCICTL2.bit.TXRDY == 1)
  24. {
  25. Scia_Send(SciaRegs.SCIRXBUF.bit.RXDT);
  26. PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;
  27. }
  28. }
复制代码


5、主函数
在上一篇GPIO发布的基础上增加sci功能,实现数据的收发,同时,led和按键功能也正常工作。


  1. int main(void)
  2. {
  3. uint16_t cnt = 0;
  4. /*初始化系统控制:PLL,WatchDog,使能外设时钟*/
  5. InitSysCtrl();
  6. /*初始化内存控制寄存器,使能内存流水线模式*/
  7. InitFlash();
  8. /*初始化串口通信的GPIO口*/
  9. /*GPIO28: SCIRXDA*/
  10. /*GPIO29: SCITXDA*/
  11. InitSciGpio();
  12. /*关闭中断*/
  13. DINT;
  14. /*将PIE控制寄存器初始化为默认状态,该状态禁止所有PIE中断并清除所有标志*/
  15. InitPieCtrl();
  16. /*禁止CPU中断并清除所有中断标志*/
  17. IER = 0x0000;
  18. IFR = 0x0000;
  19. /*初始化PIE向量表,为PIE向量表中的所有中断向量配置对应向量的入口地址*/
  20. InitPieVectTable();
  21. /*SCI寄存器配置*/
  22. Scia_Config(9600);
  23. /*使能外部中断和CPU中断*/
  24. EINT;
  25. /*初始化KEY、LED*/
  26. InitKEY();
  27. InitLED();
  28. /*通过SCI发送字符串*/
  29. Scia_Print("Hello haawking!rn");
  30. while(1)
  31. {
  32. /*按键按下*/
  33. if(GpioDataRegs.GPADAT.bit.GPIO12 == 0)
  34. {
  35. /*D400亮*/
  36. GpioDataRegs.GPACLEAR.bit.GPIO7 = 1;
  37. }
  38. else
  39. {
  40. /*松开按键D400灭*/
  41. GpioDataRegs.GPASET.bit.GPIO7 = 1;
  42. }
  43. if(cnt == 500)
  44. {
  45. cnt = 0;
  46. /*D401一直闪烁*/
  47. GpioDataRegs.GPATOGGLE.bit.GPIO6 = 1;
  48. }
  49. else
  50. {
  51. cnt++;
  52. DELAY_US(1000);
  53. }
  54. }
  55. return 0;
  56. }
复制代码


测试

poYBAGKwfUiAdZZhAABQ8zCgFcs967.jpg


测试成功

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 中科昊芯
    +关注

    关注

    5

    文章

    80

    浏览量

    5154
  • 开发板试用
    +关注

    关注

    3

    文章

    301

    浏览量

    2092
收藏 人收藏

    评论

    相关推荐

    【RA-Eco-RA4E2-64PIN-V1.0开发板试用】02、UART串口通信

    调试信息。 所以,为了方便后续调试,在这一节中,学习使用FSP库进行UART串口通信。 1 硬件部分 从RA-Eco-RA4E2-64PIN-V1.0开发板的原理图可以知道,这块板子使用CH340N
    发表于 12-14 11:44

    微主板/开发板Linux系统播放音频方法,触觉智能RK3562开发板演示

    本文介绍瑞微方案主板/开发板Linux系统播放音频的方法,触觉智能RK3562开发板演示,通用RK3566、RK3568、RK3588等
    的头像 发表于 12-13 11:40 174次阅读
    瑞<b class='flag-5'>芯</b>微主板/<b class='flag-5'>开发板</b>Linux系统播放音频方法,触觉智能RK3562<b class='flag-5'>开发板</b>演示

    追加名额丨米尔瑞微RK3576开发板有奖试用

    米尔与瑞微合作发布的新品基于瑞微RK3576应用处理器的MYD-LR3576开发板免费试用活动加码啦~~米尔追加了2块价值849元的MYD-LR3576
    的头像 发表于 11-22 01:00 161次阅读
    追加名额丨米尔瑞<b class='flag-5'>芯</b>微RK3576<b class='flag-5'>开发板</b>有奖<b class='flag-5'>试用</b>

    【迅为】瑞微RK3588开发板RK3568开发板区别及优势

    RK3568开发板
    的头像 发表于 11-18 14:19 342次阅读
    【迅为】瑞<b class='flag-5'>芯</b>微RK3588<b class='flag-5'>开发板</b>RK3568<b class='flag-5'>开发板</b>区别及优势

    【RA8D1试用活动】RA8D1B-CPKCOR开发板移植linux

    【RA8D1试用活动】RA8D1B-CPKCOR开发板移植linux
    的头像 发表于 11-16 01:02 218次阅读
    【RA8D1<b class='flag-5'>试用</b>活动】RA8D1B-CPKCOR<b class='flag-5'>开发板</b>移植linux

    有奖丨米尔 瑞微RK3576开发板免费试用

    米尔与瑞微合作发布的新品基于瑞微RK3576应用处理器的MYD-LR3576开发板免费试用活动来啦~~米尔提供了7块价值849元的MYD-LR3576
    的头像 发表于 11-12 01:00 296次阅读
    有奖丨米尔 瑞<b class='flag-5'>芯</b>微RK3576<b class='flag-5'>开发板</b>免费<b class='flag-5'>试用</b>

    有奖试用!!RA-Eco-RA4E2-64PIN-V1.0开发板试用活动开始报名

    有奖试用!!RA-Eco-RA4E2-64PIN-V1.0开发板试用活动开始报名
    的头像 发表于 11-09 01:02 233次阅读
    有奖<b class='flag-5'>试用</b>!!RA-Eco-RA4E2-64PIN-V1.0<b class='flag-5'>开发板</b><b class='flag-5'>试用</b>活动开始报名

    【RA-Eco-RA2E1-48PIN-V1.0开发板试用】开箱点灯

    【RA-Eco-RA2E1-48PIN-V1.0开发板试用】开箱点灯 0. 写在前面 在此,衷心感谢电子发烧友平台和瑞萨提供的免费试用名额,让我有机会体验和评估
    发表于 10-26 22:47

    在NXP源码基础上如何适配ELF 1开发板UART功能

    UART即通用异步收发器,是一种支持全双工串行通信协议的接口。在i.MX6ULL处理器平台上,该处理器原生支持多达8路的UART接口,提供了丰富的串行通信能力。 针对ELF 1开发板,实际引出了4路
    的头像 发表于 09-29 11:49 337次阅读
    在NXP源码基础上如何适配ELF 1<b class='flag-5'>开发板</b>的<b class='flag-5'>UART</b>功能

    ElfBoard技术贴|如何在NXP源码基础上适配ELF 1开发板UART功能

    UART即通用异步收发器,是一种支持全双工串行通信协议的接口。在i.MX6ULL处理器平台上,该处理器原生支持多达8路的UART接口,提供了丰富的串行通信能力。 针对ELF 1开发板,实际引出
    的头像 发表于 09-25 13:56 2294次阅读
    ElfBoard技术贴|如何在NXP源码基础上适配ELF 1<b class='flag-5'>开发板</b>的<b class='flag-5'>UART</b>功能

    喜报!中科荣获国家级专精特新“小巨人”企业称号

    喜讯!近日,国家工业和信息化部门正式揭晓了第六批国家专精特新“小巨人”企业名单,中科凭借卓越的技术实力和创新能力,荣获了专精特新“小巨人”企业殊荣。这一荣誉不仅是对中科
    的头像 发表于 09-14 08:00 654次阅读
    喜报!<b class='flag-5'>中科</b><b class='flag-5'>昊</b><b class='flag-5'>芯</b>荣获国家级专精特新“小巨人”企业称号

    点击参与米尔NXP i.MX 93开发板有奖试用

    米尔与NXP合作发布的新品基于NXPi.MX93应用处理器的MYD-LMX9X开发板免费试用活动来啦~~米尔提供了3块价值678元的MYD-LMX9X开发板发起试用活动您不仅可以免费体
    的头像 发表于 06-13 08:02 520次阅读
    点击参与米尔NXP i.MX 93<b class='flag-5'>开发板</b>有奖<b class='flag-5'>试用</b>

    免费!NXP i.MX 93开发板有奖试用

    米尔与NXP合作发布的新品基于NXPi.MX93应用处理器的MYD-LMX9X开发板免费试用活动来啦~~米尔提供了2块价值678
    的头像 发表于 05-23 08:01 719次阅读
    免费!NXP i.MX 93<b class='flag-5'>开发板</b>有奖<b class='flag-5'>试用</b>

    fpga开发板与linux开发板区别

    FPGA开发板与Linux开发板是两种不同的硬件开发平台,各自具有不同的特点和应用场景。在以下的文章中,我将详细介绍FPGA开发板和Linux开发板
    的头像 发表于 02-01 17:09 2226次阅读

    使用爱派Pro开发板部署人体姿态估计模型

    在经过之前对于开发板的使用,以及通过几个爱派官方给出的示例demo(mobilenet/yolov5)在开发板上的部署之后,笔者也逐渐了解了爱派这块
    的头像 发表于 01-09 09:50 1412次阅读
    使用爱<b class='flag-5'>芯</b>派Pro<b class='flag-5'>开发板</b>部署人体姿态估计模型