This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMDSDSK6713:可在 DSK6713上以 McBSP 配置发送串行数据

Guru**** 2558250 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/598596/ccs-tmdsdsk6713-proble-to-send-serial-data-in-mcbsp-configuration-on-dsk6713

器件型号:TMDSDSK6713

工具/软件:Code Composer Studio

早上好

我有 DSK6713接口、我想通过 McBSP 通过串行 RS232连接到 PC。 我的主板配备有5-56K 子板。  我已经将 DC_DXA 和 DC_DRA 引脚连接至 USB/RS232转换器。 所需的波特约为115200。 我在接收串行数据时遇到了一些问题。 我已经验证了用示波器产生的时间信号;它似乎不是逻辑正确、我无法识别预期的全部10位。

低于所实现的代码。

//config par

//创建数字回送模式的配置结构*/
静态 McBSP_Config ConfigLoopback ={

//串行端口控制寄存器(SPCR)*/
McBSP_SPCR_RMK (

McBSP_SPCR_FREE_YES、/*串行时钟自由运行模式(FREE)
McBSP_SPCR_FREE_NO -仿真暂停期间、软位
决定 McBSP 的运行。
McBSP_SPCR_FREE_YES -在仿真暂停期间、串行
时钟继续运行。 *

McBSP_SPCR_SOFT_YES、/*串行时钟仿真模式(SOFT)
McBSP_SPCR_SOFT_NO -结合 FREE = 0、
串行端口时钟在期间立即停止
仿真停止、从而中止任何传输。
McBSP_SPCR_SOFT_YES -结合 FREE = 0、
在仿真暂停期间、串行端口时钟停止
电流传输完成后。 *

McBSP_SPCR_frst_Yes、/*帧同步发生器复位(frst)
McBSP_SPCR_frst_Yes /McBSP_SPCR_frst_0 -帧同步
生成逻辑被复位。
McBSP_SPCR_frst_no /McBSP_SPCR_frst_1 -帧同步
信号在八个 CLKG 时钟之后生成。 *

McBSP_SPCR_GRST_YES、/*采样率发生器复位(GRST)
McBSP_SPCR_GRST_Yes /McBSP_SPCR_GRST_0 -复位
McBSP_SPCR_GRST_NO /McBSP_SPCR_GRST_1 -out of reset*/

McBSP_SPCR_XINTM_XRDY、/*发送中断模式(XINTM)
McBSP_SPCR_XINTM_XRDY - XINT 由 XRDY 驱动
McBSP_SPCR_XINTM_EOS -由生成的 XINT
多通道运行中的副架末端
McBSP_SPCR_XINTM_FRM -由新帧生成的 XINT
同步
McBSP_SPCR_XINTM_XSYNCERR - XSYNCERR 生成的 XINT
*
McBSP_SPCR_XSYNCERR_NO、/*发送同步错误
McBSP_SPCR_XSYNCERR_NO /McBSP_SPCR_XSYNCERR_0 -否
帧同步错误
McBSP_SPCR_XSYNCERR_Yes /McBSP_SPCR_XSYNCERR_1 -帧
McBSP 检测到同步错误 *

McBSP_SPCR_XRST_NO、/*发送器复位(XRST)。 这将重置或启用
发送器。
McBSP_SPCR_XRST_Yes /McBSP_SPCR_XRST_0 -串行端口
发送器被禁用且处于复位状态。
McBSP_SPCR_XRST_NO /McBSP_SPCR_XRST_1 -串行端口
发送器被启用。 *

McBSP_SPCR_DLB_OFF、/*数字回送(DLB)模式
McBSP_SPCR_DLB_OFF - DLB 被禁用
McBSP_SPCR_DLB_ON -启用 DLB *

McBSP_SPCR_RJUST_RZF,/*接收数据符号扩展和对齐模式(RJUST)
McBSP_SPCR_RJUST_RZF -右对齐和零填充
DRR 中的 MSB。
McBSP_SPCR_RJUST_RSE -右对齐和符号扩展
DRR 中的 MSB。
McBSP_SPCR_RJUST_LZF -左对齐和零填充
DRR 中的 LSB。 *

McBSP_SPCR_CLKSTP_DISABLE、/*时钟停止(CLKSTP)模式
McBSP_SPCR_CLKSTP_DISABLE -禁用。 正常
为非 SPI 模式启用时钟。
McBSP_SPCR_CLKSTP_NODELAY -时钟无延迟启动。
McBSP_SPCR_CLKSTP_DELAY -时钟以延迟开始。*/

McBSP_SPCR_DXENA_OFF、/* DX Enabler (DXENA)- DX 导通时间的额外延迟。
只有第一位数据被延迟。
McBSP_SPCR_DXENA_OFF - DX 启用程序关闭。
McBSP_SPCR_DXENA_ON - DX 启用程序打开。 *

McBSP_SPCR_RINTM_RRDY、/*接收中断(RINT)模式
McBSP_SPCR_RINTM_RRDY - RRDY 驱动的 RINT
McBSP_SPCR_RINTM_EOS -由生成的 RINT
多通道运行中的副架末端
McBSP_SPCR_RINTM_FRM -由新帧生成的 RINT
同步
McBSP_SPCR_RINTM_RSYNCERR -Rint 由 RSYNCERR*/生成

McBSP_SPCR_RSYNCERR_NO、/*接收同步错误(RSYNCERR)
McBSP_SPCR_RSYNCERR_NO /McBSP_SPCR_RSYNCERR_0 -否
帧同步错误
McBSP_SPCR_RSYNCERR_Yes /McBSP_SPCR_RSYNCERR_1 -帧
McBSP 检测到同步错误 *

McBSP_SPCR_RRST_NO /*接收器复位(RRST)。 这将重置或启用
接收器。
McBSP_SPCR_RRST_Yes /McBSP_SPCR_RRST_0 -串行
端口接收器被禁用且处于复位状态。
McBSP_SPCR_RRST_NO /McBSP_SPCR_RRST_1 -串行
端口接收器启用。 //

)、

//接收控制寄存器(RCR)*/
McBSP_RCR_RMK (

McBSP_RCR_RPHASE_SINGLE、//接收阶段
McBSP_RCR_RPHASE_SINGLE -单相帧
McBSP_RCR_RPHASE_DUAL -双相帧 *

McBSP_RCR_RFRLEN2_of (1)、/*第2相(RFRLEN2)中的接收帧长度
000 0000b:每相1个字
000 0001b:每相2个字
。 。 。 。 。 。 。 。 。 。 。 。
111 1111b:每相128个字 *

McBSP_RCR_RWDLEN2_8位、/*阶段2中的接收元件长度(RWDLEN2)
McBSP_RCR_RWDLEN2_8位
McBSP_RCR_RWDLEN2_12位
McBSP_RCR_RWDLEN2_16BIT - 16位
McBSP_RCR_RWDLEN2_20BIT - 20位
McBSP_RCR_RWDLEN2_24位
McBSP_RCR_RWDLEN2_32位- 32位 *

McBSP_RCR_RCOMPAND_MSB、/*接收压扩模式(RCOMPAND)
McBSP_RCR_RCOMPAND_MSB -无压扩数据
传输从 MSB 优先开始。
McBSP_RCR_RCOMPAND_8BITLSB -无压扩、
8位数据。 传输从 LSB 优先开始。
适用于中的8位数据或32位数据
数据反转模式。
McBSP_RCR_RCOMPAND_ULAW -兼容并将 m 定律用于
接收数据。 仅适用于8位数据
McBSP_RCR_RCOMPAND_ALAW -兼容并针对使用 A-law
接收数据。 仅适用于8位数据*/

McBSP_RCR_RFIG_是、/*接收帧忽略(RFIG)
McBSP_RCR_RFIG_NO -意外接收帧
同步脉冲重新开始传输。
McBSP_RCR_RFIG_Yes -意外接收帧
同步脉冲被忽略。 *

McBSP_RCR_RDATDLY_1位、/*接收数据延迟(RDATDLY)
McBSP_RCR_RDATDLY_0BIT - 0位数据延迟
McBSP_RCR_RDATDLY_1位数据延迟
McBSP_RCR_RDATDLY_2BIT - 2位数据延迟 *

McBSP_RCR_RFRLEN1_of (9)、/*阶段1 (RFRLEN1)中的接收帧长度
000 0000b:每相1个字
000 0001b:每相2个字
。 。 。 。 。 。 。 。 。 。 。 。
111 1111b:每相128个字 *

McBSP_RCR_RWDLEN1_16BIT、/*阶段1中的接收元件长度(RWDLEN1)

McBSP_RCR_RWDLEN1_8位
McBSP_RCR_RWDLEN1_12位
McBSP_RCR_RWDLEN1_16BIT - 16位
McBSP_RCR_RWDLEN1_20BIT - 20位
McBSP_RCR_RWDLEN1_24位
McBSP_RCR_RWDLEN1_32位- 32位 *

McBSP_RCR_RWDREVRS_DISABLE/*接收32位反转特性。(RWDREVRS)
McBSP_RCR_RWDREVRS_DISABLE -32位反转被禁用
McBSP_RCR_RWDREVRS_ENABLE -32位反转被启用。
接收到的32位数据首先是 LSB。
RWDLEN 应设置为32位操作。
RCOMPAND 应该被设定为01b 否则运行
未定义。 //
)、

//发送控制寄存器(XCR)*/
McBSP_XCR_RMK (

McBSP_XCR_XPhase_single、//发送阶段
McBSP_XCR_XPhase_Single -单相帧
McBSP_XCR_XPhase_dual -双相帧 *

McBSP_XCR_XFRLEN2_of (1)、/*阶段2 (XFRLEN2)中的传输帧长度
000 0000b:每相1个字
000 0001b:每相2个字
。 。 。 。 。 。 。 。 。 。 。 。
111 1111b:每相128个字 *

McBSP_XCR_XWDLEN2_32位、/*阶段2中的发送元件长度
McBSP_XCR_XWDLEN2_8位
McBSP_XCR_XWDLEN2_12位
McBSP_XCR_XWDLEN2_16BIT - 16位
McBSP_XCR_XWDLEN2_20BIT - 20位
McBSP_XCR_XWDLEN2_24位
McBSP_XCR_XWDLEN2_32位- 32位 *

McBSP_XCR_XCOMMAND_MSB、/*发送压缩扩展模式(XCOMPAND)
McBSP_XCR_XCOMPAND_MSB -无压扩。 数据
传输从 MSB 优先开始。
McBSP_XCR_XCOMMAND_8BITLSB -无压扩、8位
数据。 传输从 LSB 优先开始。
适用于8位数据、或中的32位数据
数据反转模式。
McBSP_XCR_XCOMPAND_ULAW -使用 m-law 的 Compand
用于接收数据。仅适用于8位数据。
McBSP_XCR_XCOMMAND_ALAW -兼容并针对使用 A-law
接收数据。仅适用于8位数据。 *

McBSP_XCR_XCONFIG_是、/*发送帧忽略(XFIG)
McBSP_XCR_XCONFIG_NO -意外的发送帧
同步脉冲重新开始传输。
McBSP_XCR_XCONFIG_YES -意外的发送帧
同步脉冲被忽略。 *

McBSP_XCR_XDATDLY_0BIT、/*发送数据延迟(XDATDLY)
McBSP_XCR_XDATDLY_0BIT - 0位数据延迟
McBSP_XCR_XDATDLY_1位数据延迟
McBSP_XCR_XDATDLY_2BIT - 2位数据延迟 *

McBSP_XCR_XFRLEN1_of (1)、/*阶段1 (XFRLEN1)中的传输帧长度
000 0000b:每相1个字
000 0001b:每相2个字
。 。 。 。 。 。 。 。 。 。 。 。
111 1111b:每相128个字 *

McBSP_XCR_XWDLEN1_8位、/*阶段1中的发送元件长度(XWDLEN1)
McBSP_XCR_XWDLEN1_8位
McBSP_XCR_XWDLEN1_12位
McBSP_XCR_XWDLEN1_16BIT - 16位
McBSP_XCR_XWDLEN1_20BIT - 20位
McBSP_XCR_XWDLEN1_24位
McBSP_XCR_XWDLEN1_32位- 32位 */

McBSP_XCR_XWDREVRS_DISABLE //发送32位反转特性
McBSP_XCR_XWDREVRS_DISABLE - 32位反转
禁用。
McBSP_XCR_XWDREVRS_ENABLE - 32位反转
使能。 32位数据被发送 LSB 优先。
对于32位操作、XWDLEN 应该被置位。
XCOMPAND 应该被设定为01b;否则运行
未定义。 */

)、

/*串行端口采样率发生器寄存器(SRGR)*/
McBSP_SRGR_RMK (

McBSP_SRGR_GSYNC_SYNC、/*采样率发生器时钟同步(GSYNC)。
McBSP_SRGR_GSYNC_FREE -采样率发生器
时钟 CLKG)自由运行。
McBSP_SRGR_GSYNC_SYNC -(CLKG)正在运行、但正在运行
和帧同步信号
(FSG)仅在接收后生成
检测到帧同步信号(FSR)。
此外,帧周期(FPER)是无关的
因为周期由外部决定
帧同步脉冲。 *

McBSP_SRGR_CLKSP_RISING、/* CLKS 极性时钟边沿选择(CLKSP)
McBSP_SRGR_CLKSP_RISING - CLKS 的上升沿
生成 CLKG 和 FSG。
McBSP_SRGR_CLKSP_FALLING - CLKS 的下降边沿
生成 CLKG 和 FSG。 *
McBSP_SRGR_CLKSM_INTERNAL、/* McBSP 采样率发生器时钟模式(CLKSM)
McBSP_SRGR_CLKSM_CLKS -采样率发生器
时钟来自 CLKS。
McBSP_SRGR_CLKSM_INTERNAL -(默认值)
采样速率发生器时钟源自
内部时钟源。 *

McBSP_SRGR_FSGM_DXR2XSR、/*采样率发生器发送帧同步
模式。(FGM)
McBSP_SRGR_FSGM_DXR2XSR -发送帧同步
信号(FSX)在每个 DXR 至 XSR 上生成
复制。
McBSP_SRGR_FSGM_FSG —发送帧同步
信号由采样率发生器驱动
帧同步信号、FSG。 *

McBSP_SRGR_FPER_OF (4095)、/*帧周期(FPER)
有效值:0至4095 *

McBSP_SRGR_FWID_OF (255)、/*帧宽度(FWID)
有效值:0至255 *

McBSP_SRGR_CLKGDV_of (1)/*采样率发生器时钟分频器(CLKGDV)
有效值:0至255 //

)、

McBSP_MCR_DEFAULT、//使用 MCR 寄存器的默认值*/
McBSP_rCER_DEFAULT、//使用 rCER 寄存器的默认值*/
McBSP_XCER_DEFAULT、//使用 XCER 寄存器的默认值*/

*串行端口引脚控制寄存器(PCR)*/
McBSP_PCR_RMK (

McBSP_PCR_XIOTN_SP、//通用 I/O 模式下的发送器-仅在
SPCR 中的 XRST = 0 -(XIOEN)
McBSP_PCR_XIOEN_SP - CLKS 引脚不是通用引脚
通用输入。 DX 引脚不是通用引脚
output.FSX 和 CLKX 不是通用 I/O。
McBSP_PCR_XIOEN_GPIO - CLKS 引脚是通用引脚
输入。 DX 引脚是通用输出。
FSX 和 CLKX 是通用 I/O。 这些
串行端口引脚不执行串行端口
操作。 *
McBSP_PCR_RIOEN_SP、/*接收器处于通用 I/O 模式-仅在
SPCR 中的 RRST = 0 -(RIOEN)
McBSP_PCR_RIOEN_SP - DR 和 CLKS 引脚不是
通用输入。 FSR 和 CLKR 不是
通用 I/O 和执行串行端口
操作。
McBSP_PCR_RIOEN_GPIO - DR 和 CLKS 引脚为
通用输入。 FSR 和 CLKR 是
通用 I/O。 这些串行端口引脚确实如此
不执行串行端口操作。 *
McBSP_PCR_FSXM_INTERNAL、/*发送帧同步模式(FSXM)
McBSP_PCR_FSXM_EXTERNAL -帧同步
信号由外部源提供。 FSX
是输入引脚。
McBSP_PCR_FSXM_INTERNAL -帧同步
生成由采样率决定
发生器帧同步模式位 FGM
在 SRGR 中。 *

McBSP_PCR_FSRM_INTERNAL、/*接收帧同步模式(FSRM)
McBSP_PCR_FSRM_EXTERNAL -帧同步
信号由外部器件生成。
FSR 是一个输入引脚。
McBSP_PCR_FSRM_INTERNAL -帧同步
信号由采样在内部生成
速率发生器。 FSR 是一个输出引脚、除了
当 SRGR 中的 GSYNC = 1时。 *

McBSP_PCR_CLKXM_OUTPUT、/*发送器时钟模式(CLKXM)
McBSP_PCR_CLKXM_INPUT -发送器时钟为
由一个外部时钟驱动、其中 CLKX 为
输入引脚。
McBSP_PCR_CLKXM_OUTPUT - CLKX 是一个输出引脚
并由内部采样率驱动
发生器。

在 SPI 模式期间:
McBSP_PCR_CLKXM_INPUT - McBSP 是从器件和
(CLKX)由中的 SPI 主器件驱动
系统。 CLKR 由 CLKX 在内部驱动。
McBSP_PCR_CLKXM_OUTPUT - McBSP 是主器件和
生成到的发送器时钟(CLKX)
驱动其接收器时钟(CLKR)和移位
SPI 兼容从器件的时钟
系统。 *
McBSP_PCR_CLKRM_OUTPUT、/*接收器时钟模式(CLKRM)

案例1:SPCR 中未设置数字环回模式

McBSP_PCR_CLKRM_INPUT -接收时钟(CLKR)为
由外部时钟驱动的输入。

McBSP_PCR_CLKRM_OUTPUT - CLKR 是一个输出引脚
由采样率发生器驱动。

案例2:SPCR 中设置的数字环回模式

McBSP_PCR_CLKRM_INPUT -驱动接收时钟
由基于的发送时钟(CLKX)提供
在 PCR 中的 CLKXM 位上。 CLKR 处于高电平
阻抗。
McBSP_PCR_CLKRM_INPUT - CLKR 是一个输出引脚和
由发送时钟驱动。 发送
时钟来自 PCR 中的 CLKXM 位。*/


McBSP_PCR_CLKSSTAT_0、/* CLKS 引脚状态(CLKSSTAT)
McBSP_PCR_CLKSSTAT_0
McBSP_PCR_CLKSSTAT_1 *

McBSP_PCR_DXSTAT_0、/* DX 引脚状态(DXSTAT)
McBSP_PCR_DXSTAT_0
McBSP_PCR_DXSTAT_1 *

McBSP_PCR_FSXP_ACTIVELOW、/*传输帧同步极性(FSXP)
McBSP_PCR_FSXP_ACTIVEHIGH -帧同步
脉冲 FSX 为高电平有效
McBSP_PCR_FSXP_ACTIVELOW -帧同步
脉冲 FSX 为低电平有效 *
McBSP_PCR_FSRP_ACTIVELOW、/*接收帧同步极性(FSRP)
McBSP_PCR_FSRP_ACTIVEHIGH -帧同步
脉冲 FSR 为高电平有效
McBSP_PCR_FSRP_ACTIVELOW -帧同步
脉冲 FSR 为低电平有效 *
McBSP_PCR_CLKXP_Rising、/*发送时钟极性(CLKXP)
McBSP_PCR_CLKXP_Rising -传输数据被驱动
CLKX 的上升沿
McBSP_PCR_CLKXP_FALLING -传输数据驱动于
CLKX 的下降沿 *
McBSP_PCR_CLKRP_FALLING /*接收时钟极性(CLKRP)
McBSP_PCR_CLKRP_FALLING -在上采样接收数据
CLKR 的下降沿
McBSP_PCR_CLKRP_Rising -接收采样数据
CLKR 的上升沿 */
)
};


//主例程在 RS232上发送'65dec '数据。


void main (){


DSK6713_rset (DSK6713_MISC、0x03);


McBSP_Handle hMcbsp;
volatile UINT32 x、y;
x=0;
int Success = 1;

//初始化芯片支持库、在使用 CSL
CSL_init ()时必须;

//打开串行端口1//preConfigbsps (


McBSP = 32位



);打开 McBSP_post2 (McBSP = 2);打开 McBSP_reset (McBSP_reset = 2)。 我们有
//设置采样率发生器以允许自计时。
McBSP_config (hMcbsp、&ConfigLoopback);

//启动 McBSP0
McBSP_start (hMcbsp、McBSP_Xmit_start | McBSP_RCV_START | McBSP_SRGR_START | McBSP_SRGR_FRAMESYNC、220);

//现在我们将循环一段时间,同时
读回端口/然后读出这些值。 这需要几秒钟时间。
对于(y=0;y<0x00000001;y++){//for (y=0;y<0x00080000;y++){
x=0;
//等待发送器准备好采样,然后写入
while (!McBSP_xrdy (hMcbsp));

uint32* handletx =(uint32*)(McBSP_getXmtAddr (hMcbsp));
(* handletx)= 0x0000;

(* handletx)= 0x0000;
(* handletx)= 0xFFFFFFFF;
(* handletx)= 0x0000;
(* handletx)= 0xFFFFFFFF;

(* handletx)= 0x0000;
(* handletx)= 0xFFFFFFFF;
(* handletx)= 0x0000;
(* handletx)= 0xFFFFFFFF;

(* handletx)= 0x0000;
//McBSP_write (hMcbsp、'a');

//现在等待直到接收到该值,然后再读取它
// while (!McBSP_rdy (hMcbsp));
//x = McBSP_read (hMcbsp);
printf ("\NTX");
//检查以确保它们匹配
如果(x!= 0){
成功= 0;
printf ("\nRx");//printf ("\ntest failed");
//break;
}
}

//现在全部完成,关闭端口。
McBSP_close (hMcbsp);
if (成功)
printf ("\ntest 通过\n");
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我已通知软件团队。 他们的反馈将在此处发布。

    此致、
    Yordan