TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F280049C: 280049 LIN用作SCI的波特率计算及配置

Part Number:TMS320F280049C

你好,问:280049 外设LIN用作SCI,系统主频100M, 要9600波特率,相关对应BRSR.SCI_LIN_PSL,SCI_LIN_PSH, M值应该多少?怎样计算?

Susan Yang:

您可以看一下driverlib内的如下函数

//*****************************************************************************
//
//! Set Baud Rate Prescaler
//!
//! \param base is the LIN module base address
//! \param prescaler is the 24-bit integer prescaler
//! \param divider is the 4-bit fractional divider
//!
//! In LIN and SCI mode, this function is used to set the baudrate based on
//! the \e prescaler and \e divider values.
//!
//! P = Prescaler\n
//! M = Fractional Divider \n
//! Bitrate = (SYSCLOCK) / ((P + 1 + M/16) * 16) \n
//!
//! \return None.
//
//*****************************************************************************
static inline void
LIN_setBaudRatePrescaler(uint32_t base, uint32_t prescaler,uint32_t divider)
{//// Check the arguments.//ASSERT(LIN_isBaseValid(base));ASSERT(prescaler <= (LIN_BRSR_SCI_LIN_PSL_M | LIN_BRSR_SCI_LIN_PSH_M));ASSERT(divider <= (LIN_BRSR_M_M >> LIN_BRSR_M_S));//// Set baud rate prescaler and divider//HWREG_BP(base + LIN_O_BRSR) = (prescaler | (divider << LIN_BRSR_M_S));
}

,

user1431255:

波特率配置没问题了。谢谢

1、参考例程(地址方式)配置或修改LIN收发都可以正常

2、参考例程(地址方式)配置LIN,自己写配置LIN模块相关(时钟+PIN+LIN的SCI模式配置)代码,配置成内循环或外循环,接收用查询或中断都收和发不成功,是什么原因?出错在哪里?

配置LIN代码如下:

EALLOW;

LinaRegs.SCIGCR0.bit.RESET = 0; // Into reset, lin module DELAY_US(50); LinaRegs.SCIGCR0.bit.RESET = 1; // Out of reset

LinaRegs.SCIGCR1.bit.SWnRST = 0; // Into software reset, reset state

// // SCI Configurations // LinaRegs.SCIGCR1.bit.COMMMODE = 0; // Idle-Line Mode 1 LinaRegs.SCIGCR1.bit.TIMINGMODE = 1; // Asynchronous Timing 1 LinaRegs.SCIGCR1.bit.PARITYENA = 0; // No Parity Check 1 LinaRegs.SCIGCR1.bit.PARITY = 0; // Odd Parity 1 LinaRegs.SCIGCR1.bit.STOP = 0; // One Stop Bit 1 LinaRegs.SCIGCR1.bit.CLK_MASTER = 1; // Enable SCI Clock 1 LinaRegs.SCIGCR1.bit.LINMODE = 0; // SCI Mode LinaRegs.SCIGCR1.bit.SLEEP = 0; // Ensure Out of Sleep LinaRegs.SCIGCR1.bit.MBUFMODE = 0; // No Buffers Mode 1 LinaRegs.SCIGCR1.bit.LOOPBACK = 0; // External Loopback// LinaRegs.SCIGCR1.bit.LOOPBACK = 1; // interner Loopback LinaRegs.SCIGCR1.bit.CONT = 1; // Continue on Suspend 1// LinaRegs.SCIGCR1.bit.RXENA = 1; // Enable RX// LinaRegs.SCIGCR1.bit.TXENA = 1; // Enable TX

// // Ensure IODFT is disabled //// LinaRegs.IODFTCTRL.bit.IODFTENA = 0x0;

// // Set transmission length // LinaRegs.SCIFORMAT.bit.CHAR = 7; //Eight bits 1 LinaRegs.SCIFORMAT.bit.LENGTH = 0; //One byte 1

// // Set baudrate // LinaRegs.BRSR.bit.SCI_LIN_PSL = 650; //Baud = 9600 bps LinaRegs.BRSR.bit.M = 1;

LinaRegs.SCIGCR1.bit.SWnRST = 1; //bring out of software reset, ready state

//———–int——————————— LinaRegs.SCISETINT.bit.SETRXINT = 1; LinaRegs.SCICLEARINTLVL.bit.CLRRXINTLVL = 1;// LinaRegs.SCISETINTLVL.bit.SETRXINTOVO = 1;

LinaRegs.LIN_GLB_INT_EN.bit.GLBINT0_EN = 1; //enable LinaRegs.LIN_GLB_INT_CLR.bit.INT0_FLG_CLR = 1; //clear int0 LinaRegs.LIN_GLB_INT_FLG.bit.INT0_FLG = 1; //clear flag // // Disable write to protected registers // EDIS;

,

Susan Yang:

user1431255 说:自己写配置LIN模块相关(时钟+PIN+LIN的SCI模式配置)代码,配置成内循环或外循环,接收用查询或中断都收和发不成功

请问具体表现是什么?另外您硬件方面使用的是开发板?

,

user1431255:

自写代码为什么收发不了,表现:Tx示波器没有波形和串口上位没有数据,接收没有中断或查询接收标志RXRDY没有置位

同样TI开发板,lib lin例程库上修改成中断或查询,内循环或外部都正常收发波形和数据。

图2 寄存器异常,什么原因

,

user1431255:

在上面代码基础上插入LIN例程仿真结果值

//———————————————-

LinaRegs.SCIGCR0.all = 0x00000001;   // 插入例程仿真结果值 LinaRegs.SCIGCR1.all = 0x00A20000; LinaRegs.SCIGCR2.all = 0x030200A2; LinaRegs.SCISETINT.all = 0x00000302; LinaRegs.SCICLEARINT.all = 0x00000000; LinaRegs.SCISETINTLVL.all= 0x00000000; LinaRegs.SCICLEARINTLVL.all= 0x00000000; LinaRegs.SCIFLR.all = 0x00000000;   // 插入例程仿真结果值

//———————————————-

LinaRegs.SCIGCR1.bit.SWnRST = 1; //bring out of software reset, ready state

1、仿真跑到次位置看寄存器值与插入配置对应值不一样,见图2,为什么会这样?CCS V10.3

2、同个东西,在两页显示不一样为什么会这样?见下两图

,

Susan Yang:

user1431255 说:图2 寄存器异常,什么原因

若是可以的话,请给出您的工程,我在开发板上具体看一下

,

user1431255:

没问题了,原因漏配置,感谢。

,

Susan Yang:

很高兴您能解决问题

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280049C: 280049 LIN用作SCI的波特率计算及配置
分享到: 更多 (0)