gpt4 book ai didi

c - 使用 NETMF 的 SPI 主机到 PIC18F4550 从机同步 (C18)

转载 作者:太空宇宙 更新时间:2023-11-03 23:35:47 24 4
gpt4 key购买 nike

.NET Micro Framework 设备(在本例中为 ChipworkX)通过 SPI 发送一个字节PIC18F 的接口(interface).启用 PIE1bits.SSPIE 后,将在中断时执行以下代码:

void high_isr (void)
{
PIE1bits.SSPIE = 0;
PIR1bits.SSPIF = 0; //Clear interrupt flag.
LATDbits.LATD5 = 1; //Enables LED for high interrupt activity.
while ( !SSPSTATbits.BF ); //Wait until cycle complete
red_byte_array[1] = SSPBUF;
SSPBUF = 0x00;
LATDbits.LATD5 = 0;
PIE1bits.SSPIE = 1;
}

多次发送同一个字节时,数据似乎读取不一致。主机和从机都设置为时钟空闲低电平,数据时钟在上升沿。我不使用片选线,因为它是直接通信。最后,主机以 100 kHz 的频率发送数据,而 PIC 以 8 MHz 的频率运行。

如何改进和/或修复此代码?

最佳答案

PIC16F886/7上:

如果您没有使用 /SS,那么数据会在上升沿发生变化并在下降沿被采样,对于空闲在 0 的 SCK:CKE = 0CKP = 0(或 1),SMP = 0

字节从移位寄存器移动到缓冲寄存器导致BF位和SSPIF中断,所以你通常不会在中断中循环等待BF.

应该不需要禁用SSP中断(SSPIE = 0),但您可能需要在返回前清除SSPIF从中断。

我猜你应该在 SSP 中断 (SSPIF = 1) 上:

red_byte_array[x] = SSPBUF
SSPIF = 0

您可能需要检查 WCOLSSPOV 是否有错误。

关于c - 使用 NETMF 的 SPI 主机到 PIC18F4550 从机同步 (C18),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4023946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com