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.

[参考译文] TMS320F28075:GPCGMUX 和 GPCMUX1不更改为外设 SPI C。SPI 的新特性:)

Guru**** 2798555 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1375523/tms320f28075-gpcgmux-and-gpcmux1-not-changing-to-peripheral-spi-c-new-to-spi

器件型号:TMS320F28075
Thread 中讨论的其他器件:C2000WARE

工具与软件:

大家好、我在为 F28075设置高速 SPI C 方面需要一些帮助。 将 GPCGMUX1和 GPCMUX1设置与数据表一致、设置 PORTC IO 方向寄存器 GPCDIR、然后将8位数据写入 SPICTXBUF。 数据表指出、当写入 SPICTXBUF 时、传输将开始、但遗憾的是没有发送任何内容。 我用示波器来探测 CLK 线路、发送数据时、时钟未运行。  

主 CLK 以40MHz 运行。 SPI 波特率= LSPCLK/4

我还注意到、在示波器中、如果我切换任何 *** 引脚、引脚将开启/关闭。 因此、这意味着多路复用器的设置不正确。 我做了这本书的一切,没有去。

我的 ASM 代码如下、有人能帮助我设置 SPI-C 以实现高速数据传输吗?

以下是我的代码。

XSRAM_SPI_INIT:
; SETUP SPI-C GPIO 69,70,71,72 HIGH SPEED PINS
		EALLOW
		ZAPA					; ACC=0
		MOVL XAR7,#GPCGMUX1		; SETUP GMUX1 PINS FOR SPI-C
		MOVL XAR6,#((1<<11)|(1<<10)|(1<<13)|(1<<12)|(1<<15)|(1<<14)|(1<<17)|(1<<16))
		MOVL *XAR7, XAR6
		
		RPT #50 || NOP		; DELAY

		MOVL XAR7,#GPCMUX1		; SETUP MUX1 PINS FOR SPI-C
		MOVL XAR6,#((1<<11)|(1<<10)|(1<<13)|(1<<12)|(1<<15)|(1<<14)|(1<<17)|(1<<16))
		MOVL *XAR7, XAR6

; ----------
; SPICCR
		MOVL XAR7,#SPICCCR	; PUT *** IN TO RESET STATE
		TCLR *XAR7,#7
		RPT #50 || NOP		; DELAY
; ---------
		TSET *XAR7,#5		; SET BIT HIGH SPEED MODE
		RPT #50 || NOP		; DELAY
; ---------
		TSET *XAR7,#4		; LOOPBACK MODE ENABLED
		RPT #50 || NOP
; ---------
		TSET *XAR7,#2		; CHARACTER LENGTH. 7 = 8 BITS TO TX
		RPT #50 || NOP		; DELAY
		TSET *XAR7,#1
		RPT #50 || NOP		; DELAY
		TSET *XAR7,#0
		RPT #50 || NOP		; DELAY
; ---------
; SPICTL
		MOVL XAR7,#SPICCTL
		TSET *XAR7,#2		; BIT 2 SET=MASTER MODE, CLR=SLAVE MODE
		RPT #50 || NOP		; DELAY
		TSET *XAR7,#1		; TALK = 1. ENABLE TRANSMISSION
		RPT #50 || NOP		; DELAY
; ----------
; SPIBRR - BAUD RATE CONTROL
		MOVL XAR7,#SPICBRR
		MOVW *XAR7,#3		;3h (R/W) = SPI Baud Rate = LSPCLK/4
		RPT #50 || NOP		; DELAY
; ----------
; SPICCR
		MOVL XAR7,#SPICCCR	; ENABLE ***
		TSET *XAR7,#7
		RPT #50 || NOP		; DELAY
; -----------
		EDIS

谢谢大家、我会坚持下去、希望很快收到你们的回复。

Peter  

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

    尊敬的 Peter:

    我们的主题专家到6月30日不在办公室。 请预计响应会有延迟。

    谢谢

    Aswin

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

    感谢您发送编修。 好的、我将等待您的专家提出建议。

    如果有其他人可以帮助、请这样做。

    Peter

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

    尊敬的 Peter:

    我已经就此问题与另一位 SPI 专家进行了联系、以提供帮助。

    此致!

    Ryan Ma

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

    尊敬的 Peter:

    我能问一下您为什么要发送 ASM 代码吗? 您是否参考过我们的 SPI C2000Ware 示例? 如果不是、请务必执行此操作以 查看正确的 SPI 和 GPIO 初始化-您始终可以生成.out 并查看反汇编。  

     一般调试 SPI 的一些提示:

    正确的做法是、控制器器件对 TXBUF 的写入应引出 SPI 时钟来启动并启动数据事务。

    我通常做的第一件事是检查 SPI 在正常速度下是否正常工作。 您可以通过打开内部环回模式(RX 和 TX 短接)对此进行测试、并使用低速 SPI 来查看是否正常发送和接收数据。 我 通常建议您从我们的示例之一开始、并根据您的应用进行调整。 我还想强调的一点是、我们的 SPI 缓冲区/FIFO 针对16位数据进行了优化、并首先移出 MSB。 如果您正在发送8位数据、在写入 TXBUF 之前请务必将数据左移8位、以便8位数据正确移出(接收时无需位漂移、因为数据先填充到 RXBUF LSB 中)。

    一旦您确认 SPI 在内部环回上正常工作、这意味着您的配置应该正确、因此我们可以关闭环回模式、然后实施高速模式。 高速模式只需进行以下更改:

    1. 在 SPI 模块配置中启用 SPI 高速模式
    2. 请确保所使用的专用 GPIO 可支持 SPI 高速模式(这些特定 GPIO 可支持更高的切换速率)

    以下是 为此设置 SPI GPIO 通常需要的准备工作:

    // You can enable pull-ups if desired
    GpioCtrlRegs.GPCPUD.bit.GPIO69 = 0;
    GpioCtrlRegs.GPCPUD.bit.GPIO70 = 0;
    GpioCtrlRegs.GPCPUD.bit.GPIO71 = 0;
    GpioCtrlRegs.GPCPUD.bit.GPIO72 = 0;
    
    // Set qualification for selected pins to asynch input only
    GpioCtrlRegs.GPCQSEL1.bit.GPIO69 = 3; 
    GpioCtrlRegs.GPCQSEL1.bit.GPIO70 = 3;  
    GpioCtrlRegs.GPCQSEL1.bit.GPIO71 = 3; 
    GpioCtrlRegs.GPCQSEL1.bit.GPIO72 = 3; 
    
    // Below sets up the HS *** GPIOs (no need to set direction as that is only needed if these are general GPIOs and not set up to be SPI pins).
    GpioCtrlRegs.GPCMUX2.bit.GPIO69 = 11;
    GpioCtrlRegs.GPCGMUX2.bit.GPIO69 = 11;
    
    GpioCtrlRegs.GPCMUX2.bit.GPIO70 = 11;
    GpioCtrlRegs.GPCGMUX2.bit.GPIO70 = 11;
    
    GpioCtrlRegs.GPCMUX2.bit.GPIO71 = 11;
    GpioCtrlRegs.GPCGMUX2.bit.GPIO71 = 11;
    
    GpioCtrlRegs.GPCMUX2.bit.GPIO72 = 11;
    GpioCtrlRegs.GPCGMUX2.bit.GPIO72 = 11;

    此致、

    Allison

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

    你好 Allison,很抱歉,我一直很忙。 感谢您提供的信息、

    我之所以发布 asm 代码、是因为我是汇编器程序员、而不是 C 程序员。 20世纪80年代以来、我就一直使用汇编语言进行编程、所以我非常习惯使用汇编语言进行编程。

    好的、我将尝试正常速度 SPI 引脚在重新开启环路的情况下进行测试、然后、如果所有引脚都正常工作、我将尝试高速引脚。  

    再次感谢 Allison。 谢谢

    Peter

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

    尊敬的 Peter:

    我会将该主题移至"等待客户"、直到您回复测试结果。

    谢谢!

    Luke

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

    谢谢 Luke、我很快就会投入使用。

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

    大家好、Luke、我决定通过16位并行总线而不是使用 SPI 进行通信。

    感谢您和 Allison 的支持。

    有一个伟大的一天/晚上彼得