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.
工具/软件:Code Composer Studio
您好!
我想设置一个从 MSP430F5529到显示屏的 SPI 通信。 我正在使用 libary 来控制显示、但我必须设置 SPI 协议以实现更快的传输。
库有四个函数(用于传输)、按以下顺序调用:
U8X8_MSG_BYTE_INIT
U8X8_MSG_BYTE_START_TRANSFER
U8X8_MSG_BYTE_SEND
和的任意组合 U8X8_MSG_BYTE_SET_DC
U8X8_MSG_BYTE_END_TRANSFER
U8X8_MSG_BYTE_INIT 用于 SPI 的初始化。 U8X8_MSG_BYTE_SEND
该函数用于数据的传输。 我需要发送 arg_int
字节,因为 arg_ptr
它将指向大小为 arg_int
的缓冲区。 芯片选择/从器件选择在 U8X8_MSG_BYTE_START_TRANSFIT 和 U8X8_MSG_BYTE_END_TRANSFERIT 中是韩式的、因此我不必处理它。
我在铭牌中要替换的两条语句:
案例 U8X8_MSG_BYTE_INIT: P3SEL |= BIT0+BIT1 + BIT2;// P3.0、1、2选项选择 MOSI MISO CLK UCB0CTL1 |= UCSWRST;//**将状态机置于复位状态** UCB0CTL0 |= UCMST+UCSYNC+UCMSB;//UCMODE_2;// 3引脚8位 SPI 主器件 // MSB、时钟极性高 UCB0CTL1 |= UCSSEL_2;// SMCLK 时钟 Auswahl UCB0BR0 = 0x04;//波特率13Mhz /4 UCB0BR1 = 0;//时钟频率由 UCB0BR0 + UCB0BR1 * 256缩放 UCB0CTL0 &=~UCCKPL;//时钟极性 UCB0CTL0 &=~UCCKPH;//时钟相位 UCB0CTL1 &=~UCSWRST; UCB0IE |= UCRXIE+UCTXIE;//启用 USCI_B0 RX+TX 中断 中断;
和:
uint8_t *数据;
案例 U8X8_MSG_BYTE_SEND: 数据=(uint8_t *) arg_ptr; while (!(UCB0IFG&UCTXIFG));// USCI_B0 TX 缓冲区准备就绪? while (arg_int >0) { while (!(UCB0IFG&UCTXIFG));// USCI_B0 TX 缓冲区准备就绪? _DELAY_CYCLES (20); P2DIR |= BIT3; P2OUT |= BIT3; UCB0TXBUF =*数据; arg_int--; Data++; } 中断;
我现在在故障排除中遇到了几天的问题。 我已经检查了许多示例和数据表、但我找不到故障/故障、
如果有一些帮助、我将不胜感激。 谢谢
我没有向显示屏传输数据。 好的、我删除了该行。 谢谢。
引脚2.3上只有一个小 LED。
我有一个数据传输到显示器。 谢谢
器件型号:MSP430F5529
工具/软件:Code Composer Studio
您好!
我想设置 从 MSP430F5529 到显示屏的快速 SPI 通信。 我正在使用 libary 来控制显示、但我必须设置 SPI 协议以实现更快的传输。
库有四个函数(用于传输)、按以下顺序调用:
U8X8_MSG_BYTE_INIT
U8X8_MSG_BYTE_START_TRANSFER
U8X8_MSG_BYTE_SEND
和的任意组合 U8X8_MSG_BYTE_SET_DC
U8X8_MSG_BYTE_END_TRANSFER
U8X8_MSG_BYTE_INIT 用于 SPI 的初始化。 U8X8_MSG_BYTE_SEND
该函数用于数据的传输。 我需要发送 arg_int
字节,因为 arg_ptr
它将指向大小为 arg_int
的缓冲区。 芯片选择/从器件选择在 U8X8_MSG_BYTE_START_TRANSFIT 和 U8X8_MSG_BYTE_END_TRANSFERIT 中是韩式的、因此我不必处理它。
我必须在模板中替换两个语句:
案例 U8X8_MSG_BYTE_SEND: 数据=(uint8_t *) arg_ptr; while (arg_int >0) { while (!(UCB0IFG&UCTXIFG)); // USCI_B0 TX 缓冲器就绪? UCB0TXBUF =*数据; while (UCB0STAT 和 UCBUSY); arg_int--; Data++; } 中断;
案例 U8X8_MSG_BYTE_INIT: P3SEL |= BIT0+BIT1 + BIT2; // P3.0、1、2选项选择 MOSI MISO CLK UCB0CTL1 |= UCSWRST; //**将状态机置于重置中** UCB0CTL0 |= UCMST+UCMSB+UCSYNC+UCCKPL; // 3引脚、8位 SPI 主器件 // MSB UCB0CTL1 |= UCSSEL_2; // SMCLK 时钟 Auswahl UCB0BR0 = 140; //波特率13Mhz UCB0BR1 = 0; //时钟频率由 UCB0BR0 + UCB0BR1 * 256缩放 UCB0CTL0 &=~UCCKPH; //时钟相位 //UCB0CTL0 &=~UCCKPL; //UCB0CTL0 &=~UC7BIT; UCB0CTL1 &=~UCSWRST; 中断;
我的问题是、传输仅在 高达 10kHz 的频率下工作正常。 如果我提高频率、它将无法正确传输。 没有中断、是否能够实现更快的 SPI 传输? 谢谢
[引用用户="Bruce McKenney47378"]您是否拥有该库的源代码?
库是开源的: github.com/.../u8g2
[引用用户="Bruce McKenney47378"]我只是想弄清楚这是一个故障还是一个不够快速的问题。
在高达10kHz 的时钟频率下、显示屏工作正常、但显示屏能够处理7MHz 的频率、我至少需要500MHz 的频率。
我已经在 Arduino 之外的微控制器和软件 SPI 中实现了对库的一般使用的延迟。 我已使用 "_delay_cycles ()" 作为延迟。 这可能是问题吗?
[引用用户="Bruce McKenney47378"]另一件事需要注意:我看到了显示的数据表、其中规定了某些事务(通常是初始化期间的命令)之后的延迟、以便为器件提供处理这些事务的时间。
我在数据表 中没有发现任何规定的延迟:www.lcd-module.de/.../uc1611s_v1_0.pdf
700MHz 和不同的控制器都能正常工作、所以我认为在执行某些命令后不需要延迟。
[引用用户="Bruce McKenney47378"]运行过快时出现什么症状?
它不显示任何内容、尽管存在传输。
[引用用户="Bruce McKenney47378">另外:如何处理 U8X8_MSG_BYTE_SET_DC? 是的、我希望它非常简单、但有时它所需的只是一个拼写错误。
数据/命令行的输出电平已在 GPIO 映射中处理。
案例 U8X8_MSG_BYTE_SET_DC: u8x8_GPIO_SetDC (u8x8、arg_int); 中断; //在 GPIO 映射 情况下 U8X8_MSG_GPIO_DC:// DC (DATA/CD、A0、寄存器选择)引脚:arg_int 中的输出电平 if (arg_int) { P4OUT |= BIT2; } 其他 { P4OUT &=~BIT2; } 中断;