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.

[参考译文] TM4C123GH6PM:接收到的字节与使用内部环路发送的字节无关

Guru**** 2473260 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/682068/tm4c123gh6pm-the-byte-received-is-not-related-to-the-byte-sent-using-internal-loop

器件型号:TM4C123GH6PM

您好!

此程序在内部将 TX 循环到 Rx 。  我收到的内容与我发送的内容无关。 为什么?

#include

uint8_t SEND = 0x00;
uint8_t myrxd = 0x00;

void ReadSPI (void){
while (((SSI2->SR &(1<<2)=0);//wiat 为空
myrxd = SSI2->DR;

void writeSPI (uint8_t data){
SSI2 -> DR =数据;
while (((SSI2 -> SR &(1 << 4))= 1);//等待忙

int main()

//15.4初始化和配置
//1. 使用 RCGCSSI 寄存器(见346页)使能 SSI 模块。
SYSCTL -> RCGCSSI |=(1 <<2);// SSI2

//2. 通过 RCGCGPIO 寄存器(见第340页)使能相应 GPIO 模块的时钟。
SYSCTL -> RCGCGPIO |=(1 << 1);//端口 B

//3. 将相应管脚的 AFSEL 位置位(见671页)。 以确定要使用哪些 GPIO
GPIOB ->AFSEL |=(1 <<4)|(1<<5)|(1<<6)|(1 <<7);// PB4-PB7 SSI 引脚
GPIOB ->PUR |=(1 <<4)|(1<<5)|(1<<6)|(1 <<7);//启用上拉


//4. 配置 GPIOPCTL 寄存器中的 PMCn 域、将 SSI 信号分配给相应的
//引脚。 见第688页和第1351页的表23-5。
GPIOB -> PCTL |=(2<< 16)|(2<<20)|(2<< 24)|(2<<<28);//PMC 4/5/6/7

//5. 对 GPIODEN 寄存器进行编程以启用管脚的数字功能。 此外、驱动强度

GPIOB -> DEN |=(1 << 4)|(1<<5)|(1<<6)|(1<<7);

//对于每个帧格式、SSI 使用以下步骤进行配置:
//1. 在对配置进行任何更改之前、应确保 SSICR1寄存器的 SSE 位清零。
SSI2 -> CR1 &&μ~(1<<1);

//2. 选择 SSI 是主机还是从机:
SSI2 -> CR1 = 0x00000000;
SSI2 -> CR1 |=(1<0);//内部环路 TX-RX


//3. 通过写 SSICC 寄存器来配置 SSI 时钟源。

SSI2 -> CC = 0x00;//sys 时钟


//4. 通过写 SSICPSR 寄存器配置时钟预分频除数。
SSI2 -> CPSR = 0x10;

//5. 向 SSICR0寄存器写入以下配置:

SSI2 -> CR0 =(0x7<0);//0x0007

//6. 或者、按照以下步骤配置 SSI 模块的 μ µDMA 使用:

//7. 将 SSICR1寄存器的 SSE 位置位、使能 SSI 模块。
SSI2 -> CR1 |=(1<<1);//启用 SSI


while (1)

writeSPI (send++);

对于(int x=0;x <10;x++){
对于(int i=0;i < 100000;i++);


ReadSPI();

for (int i=0;i < 1;i++);              //休息

返回0;

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

    感受到您的痛苦-您是否考虑过您(独家)使用"DRM"会增加(两者)"帮助者 Crüe "的诊断工作的时间和精力-无论是供应商代理还是外部人员?

    供应商代理虽然不(完全)一致、但主要建议海报"避免 DRM -因为它的需求增加-并提供(非常)轻微的好处"。 (即增加工作量-同时不产生收益!)

    供应商的 API 中包含了大量测试代码示例、几乎没有一个示例显示在"DRM"下。 长期以来、这些特性已证明"快速、轻松、增强"您的 MCU 功能和理解能力。

    针对您的问题-大多数 SPI 实现以"全双工"模式运行(数据输出和数据输入使用相同的 SPI 时钟序列计时[可能在不同的时钟边沿上]、因此"发送"的数据将不可用(通过 API 的"SPIDataGet ()")、直到(下一个)时钟序列为止。

    API 中的两个关键 SPI 函数通常会"背靠背"发生。 (即 SPIDataPut ()后跟 SPIDataGet ()...)

    请注意,您的“登录”显示为“Shamson”... 但你的签名行却签署了“ Shamsan!”  

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

    为什么你要关注我的“名字”和使用这些词语;没有人把枪放在你的头上来回答这个问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    "关注细节"证明非常重要-尤其是在部署过时、效率低下的 DRM 时。

    您对"焦点"的注意也证明了"标记不正确"-前面的五句强烈反对您对焦点的"误解"!

    事实上,我会避免任何/所有后续的帖子-在任何一个下... "哎呀... 现已推出三款!"   您的"横幅!"

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

    除了命名辩论之外、CB1对我们支持模型的描述是准确的。 我们花了大量的时间和精力开发 TivaWare、使像您这样的客户无需了解 DRM 编码的复杂性质。 我们的 TivaWare API 经过充分测试并得到广泛使用、它们提供了在应用范围内使 TM4C 器件正常工作的最简单和最快捷的方法。 请从 http://www.ti.com/tool/SW-TM4C 下载 TivaWare 、并将其用于您的项目。 如果您由于自己的要求而坚持使用 DRM、我们将无法提供如此多的支持/完全不支持、但在这种情况下、即使是这样、TivaWare 也可能会让您受益、因为您可以查看 TivaWare 中正确编码的 API 如何处理通过 SPI 传输/接收等过程。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ralph、
    我将按照数据表中的步骤进行操作。 没有其它外部硬件,从机,涉及。 TX 内部循环到 Rx。 这是一个小代码,很容易判断一条语句是否正确或需要添加,或者 Tiva 板出现故障。 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1_MOBILE、
    您能使用简单的英语进行交流吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、SonMEE、

    请理解、我们不会因为"代码"而偏离我们的支持模式。 此外、即使您声称现在规模较小、该项目也会变得越来越复杂、我们无法提供支持。 在您快速成功使用 TivaWare 之前的100年中、您拒绝使用 TivaWare、从而使自己感到失望。 很抱歉,但我只能就此事说这话。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    以下 是使用 TivaWare 库执行回路的示例、以及使用 HWREG 启用回路模式的单次操作。

    #include 
    #include 
    #include "inc/hw_types.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_ssi.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/gpio.h"
    #include "driverlib/ssi.h"
    #include "driverlib/pin_map.h"
    
    {4'dunsigned Datarx'}、"8uint4、"4'd'、'dtratchar、'd'、'4'、'd'、'd'
    、'uDatarx 4'、'd'、'd'、'd'、'd'、'd'、'd'
    
    
    
    
    
    uint32_t ui32Index、ui32Data;
    
    SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
    SYSCTL_XTAL_16MHz);
    //必须启用 SSI2外设才能使用。
    SysCtlPeripheralEnable (SYSCTL_Periph_SSI2);
    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
    GPIOPinConfigure (GPIO_PB4_SSI2CLK);
    GPIOPinConfigure (GPIO_PB5_SSI2FSS);
    GPIOPinConfigure (GPIO_PB6_SSI2RX);
    GPIOPinConfigure (GPIO_PB7_SSI2TX);
    GPIOPinTypeSSI (GPIO_PORTB_BASE、GPIO_PIN_6 | GPIO_PIN_5 | GPIO_PIN_6 |
    GPIO_PIN_7);
    SSIConfigSetExpClk (SSI2_base、SysCtlClockGet ()、SSI_FRF_MOTO_MOTO_MODE_0、
    SSI_MODE_MASTER、1000000、8);
    SSIEnable (SSI2_base);
    
    //在 SSI2上启用环回模式
    //这没有 Tivaware 函数
    HWREG (SSI2_base + SSI_O_CR1)|= 1U;
    
    //发送 n 个字节的数据。
    //
    for (ui32Index = 0;ui32Index < 4;ui32Index++)
    {
    //
    //使用“阻塞”Put 函数发送数据。 此函数
    //将等待发送 FIFO 中有空间后再返回。
    //这使您可以确保发送的所有数据都将其输入
    //发送 FIFO。
    //
    SSIDataPut (SSI2_base、u8DataTx[ui32Index]);
    SSIDataGet (SSI2_base、&ui32Data);
    u8DataRx[ui32Index]=(unsigned char) ui32Data;
    if (u8DataTx[ui32Index]!= u8DataRx[ui32Index])
    {
    while (1);//此处的故障陷阱
    }
    }
    
    while (1);//在此传递陷阱
    }
    

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

    @ Bob、

    高度战略性-然而(非常)很好地说明了(罕见)情况(何时及何地)"DRM"可能会" 填补(非常)小缺口- API 无法预期-完全/正确地预测和/或解决..."    (我正在搜索"相似"-有 一个"噩梦"-它 被拉了...)

    是否可以注意到 、"另一个验证失败"已(再次)到达!   长期滥用 “验证/这已解决” 的现象现在... "有保障!"的边界   (什么"升级?")