当前位置: 首页 > news >正文

TMS320F28P550SJ9学习笔记15:Lin通信SCI模式结构体寄存器

今日初步认识与配置使用Lin通信SCI模式,用结构体寄存器的方式编程

文章提供完整工程下载、测试效果图

我的单片机平台是这个:

LIN通信引脚:

 

LIN通信PIE中断:

这个  PIE Vector Table  表在手册111页:

这是提到LINa的PIE中断向量:

LIN通信的帧结构:

在LIN总线上及逆行传送的实体就是帧。

帧的发送时间是每个字节发送时间的总和,再加上响应间隙时间和字节间隙时间。

信号是在帧的数据场里面输送的。多个信号可以打包成一个帧,只要这些信号彼此之间不会相互重叠。但是他们要由机群里面的同一个节点写入。

帧可以携带1-8byte的数据。对拥有指定标识符的帧来说,其包含的字节的数量应与发布服务器和所有认购器保持一致。

帧槽

每个预定的帧会在总线上分配一个槽。槽的间隙时间必须足够长,以便能够在最糟的情况下装载帧。

帧的类型

LIN总线上数据传输包括四种不同的帧,分别为无条件帧、事件触发帧、偶发帧、诊断帧。

28P550 LIN模块的功能:

 手册3444页提到了LIN模块的功能:

  • 兼容LIN 1.3、2.0和2.1协议
  • 可配置的波特率高达20 kbps
  • 两个外部引脚:LINRX和LINTX
  • 多缓冲的接收和发送单元
  • 识别掩码的消息过滤
  • 自动命令头生成
    • 预同步场
    • 同步场
    • 标识符字段
  • 响应器自动同步
    • 同步中断检测
    • 可选的带宽限制
    • 可编程的同步场验证
  • 2st可编程发送速率,具有7位小数位
  • 从发送器唤醒的LIN主导电平
  • 自动唤醒支持
  • 可编程的唤醒信号上的唤醒时间
  • 自动总线空闲检测
  • 错误检测
    • 位错误
    • 总线错误
    • 无响应错误
    • 校验和错误
    • 同步场错误
    • 奇偶错误
  • 使用直接内存访问(DMA)进行发送和接收数据的能力
  • 2个具有优先级编码的接收时间
    • 接收
    • 传输
    • ID、错误和状态
  • 支持LIN 2.0校验和
  • 增强的有限状态机(FSM)支持帧处理
  • 增强的处理扩展帧的能力
  • 增强的波特率发生器
  • 更新唤醒/进入睡眠

28P550 LIN时钟、频率、波特率:

LIN VCLK基于SYSCLK频率。

VCLK来自SYSCLK输入

使用每个LIN模块的CLK_CFG_REGS perclkdivsel字段分别以1、2或4的比例进行分频。

默认情况下,VCLK输入是SYSCLK除以2。

任何节点的传输波特率由CPU在开始时配置;这定义了比特时间Tbit。比特时间是从波特率选择寄存器(BRSR)中的字段P和M派生出来的。BRSR寄存器中还有一个额外的3位分数分频值,即字段U,进一步微调数据字段的波特率。

BRSR寄存器中预分频值的范围是:

P=0,1,2,3,...,2^24-1 

M = 0,1,2,...,15 

U = 0,1,2,3,4,5,6,7 

BRSR寄存器中的P、M和U值是用户可编程的。

P和M分频器可用于SCI模式和LIN模式,以选择波特率。

U值是一个额外的3位值,用于确定“每个Tbit增加一个T VCLK”(=0,1),

如第29.3.1.4.2节所述。如果适应位被设置且LIN外设处于自适应波特率模式,则在接收头部时测量同步字段时,所有这些分频值都会自动获得。

LIN协议定义了波特率边界为:1 kHz≤FLINCLK≤20 kHz

所有传输的比特都在Tbit周期内移入和移出。

波特率、字节时间计算公式

 P、M

图片描述了SCI/LIN模块的波特率设置。该模块通过内部生成的串行时钟来确定波特率,该时钟由外设VCLK和BRS寄存器中的预分频器P和M决定。

SCI使用BRS寄存器中的24位整数预分频器P值来选择所需的波特率,而额外的4位小数分频器M则用于细化波特率选择。

在异步定时模式下,SCI根据以下公式生成波特率时钟:

SCICLK频率 = VCLK频率 / (P+1) + M/16

当P=0时,异步波特率值为:

异步波特率值 = VCLK频率 / 32

P、M、D

更微小的波特率变化:

波特率计算实例:

Baund = 115200 :

Baund = 9600 :

SCI/LIN interrupts:

LIN收发框图:

LIN通信寄存器:

Offset: 寄存器的偏移地址。        Acronym: 寄存器的缩写名称。

Register Name: 寄存器的全称。 Write Protection: 写保护,表示该寄存器是否受写保护。

Section: 寄存器所属的章节或类别。

偏移量缩写寄存器名称
0hSCIGCRO全局控制寄存器0
4hSCIGCR1全局控制寄存器1
8hSCIGCR2全局控制寄存器2
ChSCISETINT中断使能寄存器
10hSCICLEARINT中断禁用寄存器
14hSCISETINTLVL设置中断级别寄存器
18hSCICLEARINTLVL清除中断级别寄存器
1ChSCIFLR标志寄存器
20hSCIINTVECTO中断向量偏移寄存器0
24hSCIINTVECT1中断向量偏移寄存器1
28hSCIFORMAT长度控制寄存器
2ChBRSR波特率选择寄存器
30hSCIED仿真缓冲寄存器
34hSCIRD接收数据缓冲寄存器
38hSCITD发送数据缓冲寄存器
3ChSCIPIOO引脚控制寄存器0
44hSCIPIO2引脚控制寄存器2
60hLINCOMP比较寄存器
64hLINRDO接收数据寄存器0
68hLINRD1接收数据寄存器1
6ChLINMASK接受掩码寄存器
70hLINIDLIN ID寄存器
74hLINTDO发送数据寄存器0
78hLINTD1发送数据寄存器1
7ChMBRSR最大波特率选择寄存器
90hIODFTCTRLIODFT for LIN
EOhLIN_GLB_INT_ENLIN全局中断使能寄存器
E4hLIN_GLB_INT_FLGLIN全局中断标志寄存器
E8hLIN_GLB_INT_CLRLIN全局中断清除寄存器

BRSR寄存器:

波特率设定相关寄存器

    LinaRegs.BRSR.bit.M = 1;/* M : 代表SCI/LIN 4位分数分频器选择(M)* 这些位仅在LIN或SCI异步模式下起作用* 用于选择SCI/LIN模块的波特率,并且它们是波特率规范的分数部分* 可以通过P预分频器对波特率进行微调,每个P整数值有15个额外的中间值,从而提供更精细的波特率调整能力* */LinaRegs.BRSR.bit.SCI_LIN_PSH = 1;/* SCI_LIN_PSH :SCI/LIN预分频器P的高位选择* 用于选择SCI/LIN模块的24位整数预分频器* 在LIN模式和SCI兼容模式下有效* SCI/LIN模块使用24位整数预分频器P来选择超过16,700,000的波特率,而额外的4位分数预分频器M则用于进一步细化波特率的选择* */LinaRegs.BRSR.bit.SCI_LIN_PSL = 1;/*SCI_LIN_PSL :SCI/LIN预分频器P的低位选择* * */LinaRegs.BRSR.bit.U = 1;/* U : 代表超级分频器选择的上半部分(Upper part of the Superfractional Divider Selection)。*  “这些位是波特率规范的额外分数部分。”:说明这些位用于进一步细化波特率的分数部分* */

Lin通信寄存器初始化:

 手册3486页提到了LIN通信的配置

29.3.5 LIN 配置

以下列表详细描述了软件在配置LIN模式的数据传输或接收之前可以执行的配置步骤。只要SWnRST位被清除为0整个配置过程,寄存器的编程顺序并不重要。

• 通过设置RESET位(SCIGCR0.0)启用LIN。
• 在配置LIN之前,将SWnRST清除为0(SCIGCR1.7)。
• 通过设置RXFUNC和TXFUNC位启用LINRX和LINTX引脚。
• 通过编程LINMODE位选择LIN模式(SCIGCR1.6)。
• 通过编程CLOCK位选择指挥官或响应模式。
• 通过编程SCIGCR1选择所需的帧格式(校验和、奇偶校验、长度控制)。
• 通过编程MBUFMODE位选择多缓冲区模式(SCIGCR1.10)。
• 通过编程BRSR选择用于通信的波特率。
• 设置最大波特率,以用于通信,通过编程MBRSR。
• 设置CONT位,使LIN在仿真断点处不会停止,直到LIN当前接收或传输完成(此位仅在仿真环境中使用)。
• 如果需要,通过设置SCIGCR1.16的LOOPBACK位将发射机连接到接收机内部(此功能用于执行自检)。
• 选择接收器启用RXENA位(SCIGCR1.24),如果要接收数据。
• 选择传输启用TXENA位(SCIGCR1.25),如果要传输数据。
• 选择LINMASK寄存器中的RXIDMASK和TXIDMASK字段。
• 在配置LIN后,将SWnRST(SCIGCR1.7)设置为1。
• 接收或传输数据(见第29.3.1.9节、第29.3.5.1节和第29.3.5.2节)。

注意:如果设置了TXENA且释放了SWnRST,LIN会立即生成新的DMA请求,但不会生成新的传输中断请求。如果使用中断,则必须通过软件向传输缓冲区写入数据,然后将所选ID写入LINID寄存器,以启动第一次传输。

 这个例子只是我自己照着初始化写了一下,没验证能否用:

void Init_LINA()
{//uint32_t i;// 链接中断服务函数 与 初始化引脚EALLOW;PieVectTable.LINA_0_INT = &level0ISR;PieVectTable.LINA_1_INT = &level1ISR;EDIS;//重载 以启用 LIN模块LinaRegs.SCIGCR0.bit.RESET = 1;LinaRegs.SCIGCR1.bit.SWnRST = 0;//选择LIN通信 使能LinaRegs.SCIGCR1.bit.LINMODE = 1;//LinaRegs.SCIGCR1.bit.LOOPBACK=1; //数据回环模式//使能收发LinaRegs.SCIGCR1.bit.RXENA = 1;LinaRegs.SCIGCR1.bit.TXENA = 1;//引脚控制寄存器LinaRegs.SCIPIO0.bit.RXFUNC = 1;LinaRegs.SCIPIO0.bit.TXFUNC = 1;//SCI兼容模式引脚LinaRegs.SCIPIO2.bit.RXIN = 1;LinaRegs.SCIPIO2.bit.TXIN = 1;//多缓冲区模式:LinaRegs.SCIGCR1.bit.MBUFMODE = 0; //是否使用RX/TX多缓冲器或使用单个寄存器RD0/TD0。//设定 波特率 115200 得到组合: P=19 M=0 U=5ClkCfgRegs.PERCLKDIVSEL.bit.LINACLKDIV = 4; // 预分频  VCLK = SYSCLK / 4 = 375 000 00LinaRegs.BRSR.bit.M = 15;LinaRegs.BRSR.bit.SCI_LIN_PSH = (19 >> 8) & 0xff;LinaRegs.BRSR.bit.SCI_LIN_PSL = 19 & 0xff;LinaRegs.BRSR.bit.U = 5;/*//设定波特率 9600 得到组合: P= M= U=ClkCfgRegs.PERCLKDIVSEL.bit.LINACLKDIV = 4; // 预分频  VCLK = SYSCLK / 4 = 375 000 00LinaRegs.BRSR.bit.M = ;LinaRegs.BRSR.bit.SCI_LIN_PSH = ;LinaRegs.BRSR.bit.SCI_LIN_PSL = ;LinaRegs.BRSR.bit.U = ;*///设定最大波特率//LinaRegs.MBRSR.bit.MBRLinaRegs.SCIGCR1.bit.CONT = 1; //使LIN在仿真断点处不会停止,直到LIN当前接收或传输完成//仅在LIN模式下有效LinaRegs.LINMASK.bit.RXIDMASK = 0xff; // 过滤传入的ID消息,并将其与ID字节进行比较LinaRegs.LINMASK.bit.TXIDMASK = 0xff; ////使能中断LinaRegs.SCISETINT.bit.SETRXINT = 1; //接收中断//重启LIN模块LinaRegs.SCIGCR1.bit.SWnRST = 1;}

LIN通信寄存器发送:

手册3487页提到了LIN的发送

29.3.5.2 传输数据

LIN发射器在TXFUNC位和TXENA位都设置为1时被启用。如果TXFUNC位未设置,LINTX引脚将作为通用I/O引脚,而不是LIN功能引脚。在将TXENA位设置为1之前写入TDO的任何值都不会被传输。这两个控制位允许LIN发射器保持不活动状态,与接收器独立。在接收到有效的LIN ID并进行TX匹配后,SCIFLR寄存器中的IDTXFLAG会被设置。如果启用,则会生成ID中断。

29.3.5.2.1 单缓冲区模式传输数据

当MBUFMODE位清零设置为0时,选择单缓冲区模式。在此模式下,LIN等待数据写入TDO,将数据从SCITXSHF传输并发送数据。TXRDY和TXEMPTY位指示传输缓冲区的状态。也就是说,当发射器准备好数据写入TDO时,TXRDY位被设置。此外,如果TDO和SCITXSHF都为空,则TXEMPTY位也被设置。你可以通过以下方式传输数据:

  1. 轮询传输就绪标志
  2. 传输中断
  3. DMA

在轮询方法中,软件可以在写入数据到TDO之前轮询TXRDY位变高。选择轮询方法会导致CPU不必要的负载过大。为了避免这种情况,你可以使用中断或DMA方法。要使用中断方法,需要设置SETXINT位。要使用DMA方法,必须设置SET_TX_DMA位。一旦TXRDY位被设置,就会立即生成中断或DMA请求。当LIN完成所有挂起帧的传输,SCITXSHF寄存器和TDO都为空时,TXRDY位被设置,如果启用,则会生成中断/DMA请求。因为所有数据都已传输,所以中断/DMA请求可以被停止。这可以通过禁用传输中断(CLRTXINT)/DMA请求(CLRTXDMA位)或禁用发射机(清除TXENA位)来完成。如果通过将发送校验和(SC)位设置为1来启用校验和方案,则校验和字节将在当前字节传输之后发送。SC位在校验和字节被传输后清除。

注意:TXRDY标志不能通过读取SCIINTVECTO或SCIINTVECT1寄存器中的相应中断偏移来清除。

LIN通信寄存器接收:

手册3487页提到了LIN接收:

29.3.5.1 接收数据

LIN接收器被启用以接收消息,如果RXFUNC位和RXENA位都设置为1。如果RXFUNC位未设置,LINRX引脚将作为通用I/O引脚,而不是LIN功能引脚。在接收到有效的LINID并进行RX匹配后,SCIFLR寄存器中的IDRXFLAG会被设置。如果启用,则会生成ID中断。

29.3.5.1.1 单缓冲区模式接收数据

当MBUFMODE位被清零时,选择单缓冲区模式。在此模式下,当LIN将新接收的数据从SCIRXSHF传输到RDO时,会设置RXRDY位。SCI在读取RDO中的新数据后清除RXRDY位。此外,当数据从SCIRXSHF传输到RDO时,如果检测到任何错误条件,LIN会设置FE、OE或PE标志。这些错误条件支持可配置的中断功能。你可以通过以下方式接收数据:

  1. 轮询接收就绪标志
  2. 接收中断
  3. DMA

在轮询方法中,软件可以轮询RXRDY位,并在RXRDY位设置高时读取LINRDO寄存器的RDO字节中的数据。选择轮询方法会导致CPU不必要的负载过大。为了避免这种情况,你可以使用中断或DMA方法。要使用中断方法,需要设置SETRXINT位。要使用DMA方法,必须设置SET_RX_DMA位。一旦RXRDY位被设置,就会立即生成中断或DMA请求。如果通过设置比较校验和(CC)位来启用校验和方案,则校验和将在当前正在接收的字节上进行比较,该字节预期为校验和字节。一旦接收到校验和,CC位就会被清除。如果存在校验和错误,则会立即标记CE。

29.3.5.1.2 多缓冲区模式接收数据

多缓冲区模式是在MBUFMODE位设置为1时选中的。在这种模式下,LIN在接收缓冲区中接收到编程数据数量和校验和字段、完整帧后设置RXRDY位。错误条件检测逻辑与单缓冲区模式相似,除该逻辑会监控完整帧。与单缓冲区模式类似,你可以使用轮询、DMA或中断方法读取数据。根据字节数,需要从LINRDO和LINRD1寄存器读取接收到的数据。对于长度小于或等于4的数据,从LINRDO寄存器读取数据会清除RXRDY标志。对于长度大于4的数据,从LINRD1寄存器读取数据会清除RXRDY标志。如果在数据接收过程中通过把比较校验和(CC)位设置为1来启用校验和方案,那么接收到的指示为长度字段所指示的编程数据字节数之后的字节会被视为校验和字节。一旦接收到并比较校验和,CC位就会清除。

LIN-SCI模式寄存器初始化:

 手册3463页提到了LINSCI模式初始化

29.2.4 SCI 配置

在SCI发送或接收数据之前,可以对SCI寄存器进行适当的配置。在上电或系统级复位时,SCI寄存器中的每一位都会设置为默认状态。只有在SCIGCR0寄存器中的RESET位设置为1之后,寄存器才可写。特别重要的是SCIGCR1寄存器中的SWnRST位。SWnRST是一个活动低电平位,初始化为0,并保持SCI在复位状态,直到该位被编程为1。因此,在将1写入SWnRST位之前,可以完成所有SCI配置。以下列表详细说明了软件可以在数据传输或接收之前执行的配置步骤。只要在整个配置过程中保持SWnRST位清零,寄存器的编程顺序并不重要。

  • 通过将RESET位设置为1来启用SCI。
  • 在配置SCI之前,将SWnRST位清零。
  • 通过编程SCIGCR1寄存器选择所需的帧格式。
  • 将SCIPIO0中的RX FUNC和TX FUNC位设置为1,以配置LINRX和LINTX引脚用于SCI功能。
  • 通过编程BRS寄存器选择用于通信的波特率。
  • 将SCIGCR1中的CLOCK位设置为1,以选择内部时钟。
  • 将SCIGCR1中的CONT位设置为1,使SCI在仿真断点处不停止,直到当前接收或传输完成(此位仅在仿真环境中使用)。
  • 将SCIGCR1中的LOOP BACK位设置为1,以将发射机连接到接收机内部(此功能用于执行自测试)。
  • 如果要接收数据,将RXENA位设置为1。
  • 如果要传输数据,将TXENA位设置为1。
  • 在SCI配置完成后,将SWnRST位设置为1。
  • 执行接收或传输数据(见第29.2.4.1节或第29.2.4.2节)。

 

 2025.4.15配置问题遗留:

 目前我按照按照手册配置LIN_SCI模式到这一步,通信在我的硬件平台是有问题的,没法找出问题在哪

/** Lin.c**  Created on: 2025年4月11日*      Author: 30313*/
#include "Lin_1.h"void Init_LINA_SCIMode(void)
{//uint32_t i;// 链接中断服务函数 与 初始化引脚EALLOW;PieVectTable.LINA_0_INT = &level0ISR; //RX_INTPieVectTable.LINA_1_INT = &level1ISR; //TX_INTPieCtrlRegs.PIEIER8.bit.INTx9 = 1;    //8.9PieCtrlRegs.PIEIER8.bit.INTx10 = 1;   //8.10IER |= M_INT8;GpioCtrlRegs.GPBPUD.bit.GPIO54 = 0;    //Enable pull-upGpioCtrlRegs.GPBPUD.bit.GPIO55 = 0;GpioCtrlRegs.GPBQSEL2.bit.GPIO55 = 3;  //Asynch input (LIN_SCI RX)GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 1;   // Configure GPIO55 for RX operationGpioCtrlRegs.GPBMUX2.bit.GPIO54 = 1;   // Configure GPIO54 for TX operationGpioCtrlRegs.GPBDIR.bit.GPIO54 = 1;  // 输出(TX)GpioCtrlRegs.GPBDIR.bit.GPIO55 = 0;  // 输入(RX)EDIS;//重载 以启用 LIN模块LinaRegs.SCIGCR0.bit.RESET = 1;LinaRegs.SCIGCR1.bit.SWnRST = 0;//引脚控制寄存器LinaRegs.SCIPIO0.bit.RXFUNC = 1;LinaRegs.SCIPIO0.bit.TXFUNC = 1;//SCI兼容模式引脚LinaRegs.SCIPIO2.bit.RXIN = 1;LinaRegs.SCIPIO2.bit.TXIN = 1;//多缓冲区模式:LinaRegs.SCIGCR1.bit.MBUFMODE = 0; //是否使用RX/TX多缓冲器或使用单个寄存器RD0/TD0。LinaRegs.SCIGCR1.bit.STOP = 0;  //0:1位停止位   1:2位停止位LinaRegs.SCIGCR1.bit.PARITYENA = 0; // 禁用奇偶校验LinaRegs.SCIGCR1.bit.PARITY = 0; //0:奇校验 1::偶校验   (如果使能了奇偶校验)LinaRegs.SCIFORMAT.bit.CHAR = 7; //8位数据长度//设定 波特率 115200 得到组合: P=19 M=5 U=0ClkCfgRegs.PERCLKDIVSEL.bit.LINACLKDIV = 4; // 预分频  VCLK = SYSCLK / 4 = 375 000 00LinaRegs.BRSR.bit.M = 10;LinaRegs.BRSR.bit.SCI_LIN_PSH = (26 >> 8) & 0xff;LinaRegs.BRSR.bit.SCI_LIN_PSL = 26 & 0xff;LinaRegs.BRSR.bit.U = 0;LinaRegs.SCIGCR1.bit.CLK_COMMANDER = 1; //SCI兼容模式LinaRegs.SCIGCR1.bit.TIMINGMODE = 1; //SCI异步操作,SCI模式必须设为1LinaRegs.SCIGCR1.bit.COMMMODE = 0;//0:SCI空闲线  1:SCI地址位LinaRegs.SCIGCR1.bit.ADAPT = 0; //禁用自动波特率LinaRegs.SCIGCR1.bit.CONT = 1; //仿真断点不停LinaRegs.SCIGCR1.bit.CONT = 1; //使LIN在仿真断点处不会停止,直到LIN当前接收或传输完成//LinaRegs.SCIINTVECT0.bit.INTVECT0//LinaRegs.SCICLEARINT.bit.CLRRXINT = 1;//清除接收中断//使能收发LinaRegs.SCIGCR1.bit.RXENA = 1;LinaRegs.SCIGCR1.bit.TXENA = 1;//使能中断LinaRegs.SCISETINT.bit.SETRXINT = 1; //接收中断LinaRegs.SCISETINT.bit.SETTXINT = 1; //发送中断//重启LIN模块LinaRegs.SCIGCR1.bit.SWnRST = 1;
}void LIN_Transmit_Data_SCIMode(unsigned char Data)
{LinaRegs.SCITD.bit.TD = Data;
//    while (LinaRegs.SCIFLR.bit.TXRDY == 0) //等待发送完成
//    {
//        //考虑添加超时逻辑
//    }
//    LinaRegs.SCIFLR.bit.TXEMPTY
//    LinaRegs.SCIFLR.bit.TXRDY
}__interrupt void level0ISR(void)
{}__interrupt void level1ISR(void)
{}

通信完全没发波:

但寄存器能正常置位:

LIN-SCI模式寄存器发送:

手册3464页

29.2.4.2 传输数据

如果TXFUNC位和TXENA位都设置为1,则启用SCI发射器。如果TXFUNC位未设置,LINTX引脚将作为通用I/O引脚,而不是SCI功能引脚。在将TXENA位设置为1之前写入SCITD/TDy的任何值都不会被传输。这两个控制位允许SCI发射器独立于接收器保持不活动状态。SCI模块可以在以下模式之一中传输数据:

  • 单缓冲区(正常)模式
  • 多缓冲区或缓冲区SCI模式

29.2.4.2.1 单缓冲区模式传输数据

当SCIGCR1中的MBUFMODE位清零为0时,选择单缓冲区模式。在此模式下,SCI等待数据写入SCITD,将数据从SCITD传输到SCITXSHF,并传输数据。

TXRDY和TXEMPTY位指示传输缓冲区的状态。

也就是说,当发射器准备好数据写入SCITD时,TXRDY位被设置。

此外,如果SCITD和SCITXSHF都为空,则TXEMPTY位也被设置。

你可以通过以下方式传输数据:

  1. 轮询传输就绪标志
  2. 传输中断
  3. DMA

在轮询方法中,软件可以在将数据写入SCITD寄存器之前轮询TXRDY位变高。选择轮询方法会导致CPU不必要的负载过大。为了避免这种情况,你可以使用中断或DMA方法。要使用中断方法,需要设置SETTXINT位。要使用DMA方法,必须设置SET_TX_DMA位。一旦TXRDY位被设置,就会立即生成中断或DMA请求。当SCI完成所有挂起帧的传输,SCITXSHF寄存器和SCITD都为空时,TXRDY位被设置,如果启用,则会生成中断/DMA请求。因为所有数据都已传输,所以中断/DMA请求可以被停止。这可以通过禁用传输中断(CLRTXINT)/DMA请求(CLRTXDMA位)或禁用发射机(清除TXENA位)来完成。注意:TXRDY标志不能通过读取SCIINTVECTO或SCIINTVECT1寄存器中的相应中断偏移来清除。

LIN-SCI模式寄存器接收:

 3463页

 

29.2.4.1 接收数据

SCI接收器被启用以接收消息,如果RX FUNC位和RXENA位都设置为1。如果RX FUNC位未设置,LINRX引脚将作为通用I/O引脚,而不是SCI功能引脚。SCI模块可以在以下模式之一中接收数据:

  • 单缓冲区(正常)模式
  • 多缓冲区模式

在检测到有效的空闲期后,数据会自动接收,因为数据到达LINRX引脚。

29.2.4.1.1 单缓冲区模式接收数据

当SCIGCR1中的MBUFMODE位清零为0时,选择单缓冲区模式。在此模式下,当SCI将新接收的数据从SCIRXSHF传输到SCIRD时,会设置RXRDY位。在读取SCIRD中的新数据后,SCI会清除RXRDY位。此外,当数据从SCIRXSHF传输到SCIRD时,如果在接收到的数据中检测到任何这些错误条件,则会设置FE、OE或PE标志。这些错误条件支持可配置的中断功能。如果发生这些错误之一,唤醒和中断检测状态位也会被设置,但这些位不一定会在新数据加载到SCIRD时同时出现。你可以通过以下方式接收数据:

  1. 轮询接收就绪标志
  2. 接收中断
  3. DMA

在轮询方法中,软件可以轮询RXRDY位,并在RXRDY位设置为高时从SCIRD寄存器读取数据。选择轮询方法会导致CPU不必要的负载过大。为了避免这种情况,你可以使用中断或DMA方法。要使用中断方法,需要设置SETRXINT位。要使用DMA方法,必须设置SET_RX_DMA位。在RXRDY位被设置的那一刻,会立即生成中断或DMA请求。

测试效果图:

完整工程下载:

参考文章:

LIN通讯_lin通信-CSDN博客

相关文章:

TMS320F28P550SJ9学习笔记15:Lin通信SCI模式结构体寄存器

今日初步认识与配置使用Lin通信SCI模式,用结构体寄存器的方式编程 文章提供完整工程下载、测试效果图 我的单片机平台是这个: LIN通信引脚: LIN通信PIE中断: 这个 PIE Vector Table 表在手册111页: 这是提到LINa的PI…...

JavaWeb 课堂笔记 —— 11 MySQL 多表设计

本系列为笔者学习JavaWeb的课堂笔记,视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程,实现javaweb企业开发全流程(涵盖SpringMyBatisSpringMVCSpringBoot等)》,章节分布参考视频教程,为同样学习…...

2025年最新总结安全基础(面试题)

活动发起人@小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请…...

调试chili3d笔记 typescript预习

https://github.com/xiangechen/chili3d 用firefox拓展附加进程 打开开发者 工具,这个网页按f12没反应,手动打开 创建一个立方体可以看到运行了create.box方法,消息来自commandService.ts 位置 太久没写c了,3目都看不懂了 c没有…...

【北交互联-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...

YOLOv2学习笔记

YOLOv2 背景 YOLOv2是YOLO的第二个版本,其目标是显著提高准确性,同时使其更快 相关改进: 添加了BN层——Batch Norm采用更高分辨率的网络进行分类主干网络的训练 Hi-res classifier去除了全连接层,采用卷积层进行模型的输出&a…...

2025年国企社招欧治链金再生资源入职测评笔试中智赛码平台SHL测试平台Verify认知能力测试

1、欧治链金政治素质测试(中智赛码平台,电脑端作答) 10个单选题、5个多选题、1个问答题 2、欧治链金综合素质测试(SHL测试平台Verify认知能力测试,电脑端作答) 3、欧治链金职业性格测试(中智职…...

MySQL索引和事务

MySQL索引和事务 1.索引1.1概念1.2作用1.3使用场景1.4使用1.4.1查看索引1.4.2创建索引1.4.3删除索引 2.事务2.1使用2.1.1开启事务2.1.2执行多条SQL语句2.1.3回滚或提交 2.2事务的特性2.2.1回滚是怎么做到的2.2.2原子性2.2.3一致性2.2.4持久性2.2.5隔离性2.2.5.1脏读2.2.5.2不可…...

【AI News | 20250415】每日AI进展

AI News 1、字节跳动发布Seaweed-7B视频模型:70亿参数实现音视频同步生成与多镜头叙事 字节跳动推出新一代视频生成模型Seaweed-7B,该模型仅70亿参数却实现多项突破:支持音视频同步生成、多镜头叙事(保持角色连贯性)、…...

MegaTTS3: 下一代高效语音合成技术,重塑AI语音的自然与个性化

在近期的发布中,浙江大学赵洲教授团队与字节跳动联合推出了革命性的第三代语音合成模型——MegaTTS3,该模型不仅在多个专业评测中展现了卓越的性能,还为AI语音的自然性和个性化开辟了新的篇章。 MegaTTS3技术亮点 零样本语音合成 MegaTTS3采用…...

MyBatis-Plus 详解教程

文章目录 1. MyBatis-Plus 简介1.1 什么是 MyBatis-Plus?1.2 为什么要使用 MyBatis-Plus?传统 MyBatis 的痛点MyBatis-Plus 的优势 1.3 MyBatis-Plus 与 MyBatis 的关系 2. 快速开始2.1 环境要求2.2 依赖引入MavenGradle 2.3 数据库准备2.4 配置 Spring …...

Java设计模式之观察者模式:从入门到架构级实践

一、观察者模式的核心价值 观察者模式(Observer Pattern)是行为型设计模式中的经典之作,它建立了对象间的一对多依赖关系,让多个观察者对象能够自动感知被观察对象的状态变化。这种模式在事件驱动系统、实时数据推送、GUI事件处理…...

【双指针】专题:LeetCode 202题解——快乐数

快乐数 一、题目链接二、题目三、题目解析四、算法原理扩展 五、编写代码 一、题目链接 快乐数 二、题目 三、题目解析 快乐数的定义中第二点最重要,只有两种情况,分别拿示例1、示例2分析吧: 示例1中一旦出现1了,继续重复过程就…...

深度学习占用大量内存空间解决办法

应该是缓存的问题,关机重启内存多了10G,暂时没找到别的方法 重启前 关机重启后...

[LeetCode 1871] 跳跃游戏 7(Ⅶ)

题面&#xff1a; 数据范围&#xff1a; 2 ≤ s . l e n g t h ≤ 1 0 5 2 \le s.length \le 10^5 2≤s.length≤105 s [ i ] s[i] s[i] 要么是 ′ 0 ′ 0 ′0′ &#xff0c;要么是 ′ 1 ′ 1 ′1′ s [ 0 ] 0 s[0] 0 s[0]0 1 ≤ m i n J u m p ≤ m a x J u m p <…...

同济大学轻量化低成本具身导航!COSMO:基于选择性记忆组合的低开销视觉语言导航

作者&#xff1a;Siqi Zhang 1 ^{1} 1, Yanyuan Qiao 3 ^{3} 3, Qunbo Wang 2 ^{2} 2, Zike Yan 4 ^{4} 4, Qi Wu 3 ^{3} 3, Zhihua Wei 1 ^{1} 1, Jing Liu 1 ^{1} 1单位&#xff1a; 1 ^{1} 1同济大学计算机科学与技术学院&#xff0c; 2 ^{2} 2中科院自动化研究所&#xff0…...

【Ubuntu | 网络】Vmware虚拟机里的Ubuntu开机后没有网络接口、也没有网络图标

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f60e;金句分享&#x1f60e;&a…...

第二十一讲 XGBoost 回归建模 + SHAP 可解释性分析(利用R语言内置数据集)

下面我将使用 R 语言内置的 mtcars 数据集&#xff0c;模拟一个完整的 XGBoost 回归建模 SHAP 可解释性分析 实战流程。我们将以预测汽车的油耗&#xff08;mpg&#xff09;为目标变量&#xff0c;构建 XGBoost 模型&#xff0c;并用 SHAP 来解释模型输出。 &#x1f697; 示例…...

HP惠普打印机:解决每次打印后额外产生@PJL SET USERNAME=文档的情况

情况描述 惠普商用打印机型号&#xff1a;Color LaserJet Managed MFP E78223 在每次打印文档后都会出现包含我个人电脑用户名的额外文档&#xff1a; 这不是我希望的&#xff0c;因此我联系了惠普官方客服&#xff0c;并得到了解决 解决方案 原因 具客服所说&#xff0c;这些是…...

MariaDB MaxScale 的用途与实现细节

MaxScale 主要用途 MariaDB MaxScale 是一个智能数据库代理&#xff08;proxy&#xff09;&#xff0c;主要用于增强 MySQL/MariaDB 数据库的高可用性、可扩展性和安全性&#xff0c;同时简化应用程序与数据库基础设施之间的交互。它的核心功能包括&#xff1a; 负载均衡&…...

CTF--eval

一、原网页&#xff1a; 二、步骤&#xff1a; 1.代码分析&#xff1a; <?phpinclude "flag.php"; // 引入一个文件&#xff0c;该文件可能定义了一些变量&#xff08;例如 $flag&#xff09;$a $_REQUEST[hello]; // 从用户请求中获取参数 hello 的值&#x…...

Android学习总结之算法篇七(图和矩阵)

有向图的深度优先搜索&#xff08;DFS&#xff09;和广度优先搜索&#xff08;BFS&#xff09;的示例&#xff0c;以此来模拟遍历 GC Root 引用链这种有向图结构&#xff1a; 一、深度优先搜索&#xff08;DFS&#xff09; import java.util.*;public class GraphDFS {privat…...

vmcore分析锁问题实例(x86-64)

问题描述&#xff1a;系统出现panic&#xff0c;dmesg有如下打印&#xff1a; [122061.197311] task:irq/181-ice-enp state:D stack:0 pid:3134 ppid:2 flags:0x00004000 [122061.197315] Call Trace: [122061.197317] <TASK> [122061.197318] __schedule0…...

【vue3】vue3+express实现图片/pdf等资源文件的下载

文件资源的下载&#xff0c;是我们业务开发中常见的需求。作为前端开发&#xff0c;学习下如何自己使用node的express框架来实现资源的下载操作。 实现效果 代码实现 前端 1.封装的请求后端下载接口的方法,需求配置aixos的请求参数里面的返回数据类型为blob // 下载 export…...

【BUG】Redis RDB快照持久化及写操作禁止问题排查与解决

1 问题描述 在使用Redis 的过程中&#xff0c;遇到如下报错&#xff0c;错误信息是 “MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk...”&#xff0c;记录下问题排查过程。 2 问题排查与解决 该错误提示表明&#…...

【HD-RK3576-PI】定制用户升级固件

硬件&#xff1a;HD-RK3576-PI 软件&#xff1a;Linux6.1Ubuntu22.04 在进行 Rockchip 相关开发时&#xff0c;制作自定义的烧写固件是一项常见且重要的操作。这里主要介绍文件系统的修改以及打包成完整update包升级的过程。 一、修改文件系统镜像&#xff08;Ubuntu环境操作&…...

【AI学习】李宏毅老师讲AI Agent摘要

在b站听了李宏毅2025最新的AI Agent教程&#xff0c;简单易懂&#xff0c;而且紧跟发展&#xff0c;有大量最新的研究进展。 教程中引用了大量论文&#xff0c;为了方便将来阅读相关论文&#xff0c;进一步深入理解&#xff0c;做了截屏纪录。 同时也做一下分享。 根据经验调整…...

狂神SQL学习笔记十:修改和删除数据表字段

1、修改与删除表 alter 修改表的名称&#xff1a; 增加表的字段&#xff1a; 修改表的字段&#xff08;重命名&#xff0c;修改约束&#xff09;&#xff1a; 修改约束 重命名 删除表的字段 删除表...

OSPF综合实验

一、网络拓扑 二、实验要求 1&#xff0c;R5为ISP&#xff0c;其上只能配置IP地址;R4作为企业边界路由器&#xff1b; 2&#xff0c;整个0SPF环境IP基于172.16.0.8/16划分; 3&#xff0c;所有设备均可访问R5的环回; 4&#xff0c;减少LSA的更新量&#xff0c;加快收敛&#xf…...

2025 cs144 Lab Checkpoint 2 小白超详细版

文章目录 1 环形索引的实现1.1 wrap类wrapunwrap 2 实现tcp_receiver2.1 tcp_receiver的功能2.2 传输的报文格式TCPSenderMessageTCPReceiverMessage 2.3 如何实现函数receive&#xff08;&#xff09;send&#xff08;&#xff09; 1 环形索引的实现 范围是0~2^32-1 需要有SY…...

VMware虚拟机安装Ubuntu 22.04.2

一、我的虚拟机版本 二、浏览器搜索Ubuntu 三、下载Ubuntu桌面版 四、下这个 五、创建新的虚拟机 六、选择典型&#xff0c;然后下一步 七、选择稍后安装操作系统&#xff0c;然后下一步 八、选择Linux ,版本选择Ubuntu 64位 九、选择好安装位置 十、磁盘大小一般选20G就够用了…...

XSS漏洞及常见处理方案

文章背景&#xff1a; 在近期项目安全测试中&#xff0c;安全团队发现了一处潜在的 跨站脚本攻击&#xff08;XSS&#xff09;漏洞&#xff0c;该漏洞可能导致用户数据被篡改或会话劫持等安全风险。针对这一问题&#xff0c;项目组迅速响应&#xff0c;通过代码修复、输入过滤、…...

TCP标志位抓包

说明 TCP协议的Header信息&#xff0c;URG、ACK、PSH、RST、SYN、FIN这6个字段在14字节的位置&#xff0c;对应的是tcp[13]&#xff0c;因为字节数是从[0]开始数的&#xff0c;14字节对应的就是tcp[13]&#xff0c;因此在抓这几个标志位的数据包时就要明确范围在tcp[13] 示例1…...

C/C++条件判断

条件判断 if语句的三种形态 if(a<b){} 、 if(a<b){}else{} 、 if(a<b){}else if(a>b) else{} if语句的嵌套 嵌套的常见错误&#xff08;配对错误&#xff09;,与前面最近的&#xff0c;而且还没有配对的if匹配 错误避免方法&#xff1a;严格使用 { }、先写&am…...

单位门户网站被攻击后的安全防护策略

政府网站安全现状与挑战 近年来&#xff0c;随着数字化进程的加速&#xff0c;政府门户网站已成为政务公开和服务公众的重要窗口。然而&#xff0c;网络安全形势却日益严峻。国家互联网应急中心的数据显示&#xff0c;政府网站已成为黑客攻击的重点目标&#xff0c;被篡改和被…...

# 工具记录

工具记录 键盘操作可视化工具openark64系统工具dufs-webui文件共享zotero文献查看cff explorerNoFencesfreeplane开源思维导图...

C/C++运算

C语言字符串的比较 #include <string.h> int strcmp( const char *str1, const char *str2 );例如: int ret; ret strcmp(str1, str2);返回值&#xff1a; str1 < str2时&#xff0c; 返回值< 0&#xff08;有些编译器返回 -1&#xff09; str1 > str2时…...

CloudWeGo 技术沙龙·深圳站回顾:云原生 × AI 时代的微服务架构与技术实践

2025 年 3 月 22 日&#xff0c;CloudWeGo “云原生 AI 时代的微服务架构与技术实践”主题沙龙在深圳圆满落幕。作为云原生与 AI 微服务融合领域的深度技术聚会&#xff0c;本次活动吸引了来自企业、开发者社区的百余位参与者&#xff0c;共同探讨如何通过开源技术应对智能时代…...

STM32移植文件系统FATFS——片外SPI FLASH

一、电路连接 主控芯片选型为&#xff1a;STM32F407ZGT6&#xff0c;SPI FLASH选型为&#xff1a;W25Q256JV。 采用了两片32MB的片外SPI FLASH&#xff0c;电路如图所示。 SPI FLASH与主控芯片的连接方式如表所示。 STM32F407GT6W25Q256JVPB3SPI1_SCKPB4SPI1_MISOPB5SPI1_MOSI…...

华为HG8546M光猫宽带密码破解

首先进光猫管理界面 将password改成text就可以看到加密后的密码了 复制密码到下面代码里 import hashlibdef sha256(todo):return hashlib.sha256(str(todo).encode()).hexdigest()def md5(todo):return hashlib.md5(str(todo).encode()).hexdigest()def find_secret(secret,…...

驱动-兼容不同设备-container_of

驱动兼容不同类型设备 在 Linux 驱动开发中&#xff0c;container_of 宏常被用来实现一个驱动兼容多种不同设备的架构。这种设计模式在 Linux 内核中非常常见&#xff0c;特别 是在设备驱动模型中。linux内核的主要开发语言是C&#xff0c;但是现在内核的框架使用了非常多的面向…...

UE5 检测球形范围的所有Actor

和Untiiy不同&#xff0c;不需要复杂的调用 首选确保角色添加了Sphere Collision 然后直接把sphere拖入蓝图&#xff0c;调用GetOverlappingActors来获取碰撞范围内的所有Actor...

AI大模型学习十:‌Ubuntu 22.04.5 调整根目录大小,解决根目录磁盘不够问题

一、说明 由于默认安装时导致home和根目录大小一样&#xff0c;导致根目录不够&#xff0c;所以我们调整下 二、调整 # 确认/home和/是否为独立逻辑卷&#xff0c;并属于同一卷组&#xff08;VG&#xff09; rootnode1:~# lsblk NAME MAJ:MIN RM SIZE…...

在ros2上使用opencv显示一张图片

1.先将图片放到桌面上 2.打开终端ctrlaltT&#xff0c;查看自己是否已安装opencv 3.创建工作环境 4.进入工作目录并创建ROS2包添加OpenCV依赖项 5.进入/home/kong/opencv_ws/opencv_use/src目录创建.cpp文件并编辑 6.代码如下 my_opencv.cpp #include <cstdio> #include…...

训练神经网络的原理(前向传播、反向传播、优化、迭代)

训练神经网络的原理 通过前向传播计算预测值和损失&#xff0c;利用反向传播计算梯度&#xff0c;然后通过优化算法更新参数&#xff0c;最终使模型在给定任务上表现更好。 核心&#xff1a;通过计算损失函数&#xff08;通常是模型预测与真实值之间的差距&#xff09;对模型参…...

每日一题(小白)暴力娱乐篇30

顺时针旋转&#xff0c;从上图中不难看出行列进行了变换。因为这是一道暴力可以解决的问题&#xff0c;我们直接尝试使用行列转换看能不能得到想要的结果。 public static void main(String[] args) {Scanner scan new Scanner(System.in);int nscan.nextInt();int mscan.next…...

【HTTPS】免费SSL证书配置Let‘s Encrypt自动续期

【HTTPS】免费SSL证书配置Lets Encrypt自动续期 1. 安装Certbot1.1 snapd1.2 certbot2. 申请泛域名证书使用 DNS 验证申请泛域名证书3.配置nginx申请的 SSL 证书文件所在目录nginx配置证书示例查看证书信息和剩余时间4.自动续期手动自动5.不同服务器使用1. 安装Certbot 1.1 sn…...

企业应如何防范 AI 驱动的网络安全威胁?

互联网技术和 AI 科技为世界开启了一个新的发展篇章。同时&#xff0c;网络攻击也呈现出愈发强势的发展势头&#xff1a;高级持续性威胁 &#xff08;APT&#xff1a;Advanced Persistent Threat&#xff09;组织采用新的战术、技术和程序 (TTP)、AI 驱动下攻击数量和速度的提高…...

决策树简介

【理解】决策树例子 决策树算法是一种监督学习算法&#xff0c;英文是Decision tree。 决策树思想的来源非常朴素&#xff0c;试想每个人的大脑都有类似于if-else这样的逻辑判断&#xff0c;这其中的if表示的是条件&#xff0c;if之后的else就是一种选择或决策。程序设计中的…...

ScrollView(滚动视图)详解和按钮点击事件

文章目录 **ScrollView&#xff08;滚动视图&#xff09;详解****1. 核心特性****2. 基本用法****XML 示例&#xff1a;简单滚动布局** **3. 水平滚动&#xff1a;HorizontalScrollView****4. 高级用法****(1) 嵌套滚动控件****(2) 动态添加内容****(3) 监听滚动事件** **5. 注…...