学习SCI通信


前言

SCI通信的数据格式通常是可编程的,可以通过SCI的通信控制寄存器进行设置。常见的应用包括RS422、RS485和RS232等串行通讯协议


一、SCI是什么?

SCI通信是一种串行通信接口标准,主要用于在微控制器和外部设备之间进行串行通信。 它通常通过两根引脚进行数据传输:发送引脚(‌TXD)和接收引脚(RXD)。SCI通信的基本原理包括物理连接、数据传输、时钟同步和数据处理等方面。

二、使用步骤

1.HCG配置

TMS570LC43自带的一路串口可以通过调试口传输数据。
设置起始位、数据位、‌奇偶校验位和停止位等特定的数据格式。
在这里插入图片描述

2.CCS代码

使用DMA通信。
DMA通信是一种技术,允许某些硬件设备直接访问系统内存,从而绕过‌CPU进行数据传输。这种技术的主要优点是提高了数据传输的效率,减少了CPU的负担。

#define SCI1_TX_ADDR ((uint32_t)(&(sciREG1->TD)) + 3)
uint8_t RX_DATA[100] = {0};
g_dmaCTRL g_dmaCTRLPKT;   /*!< 全局存放DMA配置信息的变量  */
void SciDmaRecv(void)
{ 
    dmaEnable();	//dma初始化		
    sciREG1->SETINT |= 3 << 17;  //使能sci接口的收发功能
	dmaReqAssign(0, DMA_REQ28);	 //绑定sci接收引脚
	//为通道0配置控制数据包
    g_dmaCTRLPKT.SADD      = SCI1_TX_ADDR ;        /* source address             */
    g_dmaCTRLPKT.DADD      = (uint32_t)RX_DATA;    /* destination  addr ss       */
    g_dmaCTRLPKT.CHCTRL    = 0;                    /* channel control            */
    g_dmaCTRLPKT.FRCNT    = 100;                   /* frame count                */
    g_dmaCTRLPKT.ELCNT     = 1;                    /* element count              */
    g_dmaCTRLPKT.ELDOFFSET = 0;                    /* element destination offset */
    g_dmaCTRLPKT.ELSOFFSET = 0;                    /* element destination offset */
    g_dmaCTRLPKT.FRDOFFSET = 0;                    /* frame destination offset   */
    g_dmaCTRLPKT.FRSOFFSET = 0;                    /* frame destination offset   */
    g_dmaCTRLPKT.PORTASGN  = PORTB_READ_PORTA_WRITE;
    g_dmaCTRLPKT.RDSIZE    = ACCESS_8_BIT;         /* read size                  */
    g_dmaCTRLPKT.WRSIZE    = ACCESS_8_BIT;         /* write size                 */
    g_dmaCTRLPKT.TTYPE     = FRAME_TRANSFER;       /* transfer type              */
    g_dmaCTRLPKT.ADDMODERD = ADDR_FIXED;           /* address mode read          */
    g_dmaCTRLPKT.ADDMODEWR = ADDR_INC1;            /* address mode write         */
    g_dmaCTRLPKT.AUTOINIT  = AUTOINIT_OFF;         /* autoinit                   */
    //设置控制数据包
    dmaSetCtrlPacket(DMA_CH0, g_dmaCTRLPKT);
    //启用DMA通道进行硬件或软件触发
    dmaSetChEnable(DMA_CH0, DMA_HW);
    
    while(dmaGetInterruptStatus(DMA_CH0, BTC) != TRUE);
    //处理接收到的数据


  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值