各位好,
Q1:我在调试Mibspi时发现CS信号一直处于低电平状态,不知道是否是设置问题?E2E上说这是正常的:http://e2e.ti.com/support/microcontrollers/hercules/f/312/t/220270,如该贴解决方法,但是对于Mibspi手动无法把CS拉低,因为你不知道数据什么时候传送完成(不加以判断),请问CS信号是否由MCU自主控制,怎么设置?
Q2:我在发送一个Group(group id = 0)数据后,判断发送是否完成:
while(((((mibspiREG1->TGINTFLG & 0xFFFF0000U) >> 16U)>> group) & 1U) != 1U){}
之后开始接收数据:
*buf = mibspiRAM1->rx[0].data;
接收到的数据是上次的数据!我的理解是,虽然已判断数据发送完成了,从设备也返回了数据,但还未还得及写入RAM。请问正确的接收方法是什么?
谢谢!
gaoyang9992006:
http://bbs.eeworld.com.cn/thread-376724-1-1.html
http://www.deyisupport.com/question_answer/microcontrollers/hercules/f/70/t/97104.aspx
———————
MibSPI可以配置正常功能SPI和多缓冲SPI, 上电或一个系统级的复位后,每个模块中的寄存器位被设置为默认状态。复位位被设置为1后该寄存器才是可写的。
二 、兼容性(SPI)模式配置
下面软件配置步骤的详细列表,发送或接收的数据前应执行的。
只要SPIENA保持低, 整个时间,正在配置SPI, 寄存器进行编程的顺序是不重要的.
•通过设置RESET位启用SPI
•通过设置在SPIPC0寄存器相应位,设置SIMO,SOMI,CLK和可选CSX,ENA引脚配置为SPI功能。
•配置模块功能的Master或Slave使用CLKMOD和MASTER位。
•配置使用SPIFMTx寄存器所需的SPI数据格式。
•如果该模块选择为主机的功能,可使用SPIDELAY寄存器配置延时参数。
•如果需要使用SPIINT0寄存器使能中断。
•选择要使用的CS通过设置在SPIDAT1寄存器CSNR位。
•如果需要配置在SPIDAT1寄存器CSHOLD和WDEL位。
•通过设置DFSEL位选择数据字格式,选择配置SPIFMTx寄存器(0到3)的数来用于通信。
•设置LOOPBACK位内部连接发送器和接收器。
(此功能是用来进行自我测试。不要配置到外部设备的正常通信)。
•SPI配置后设置SPIENA 为1。
•使用SPIDAT1和SPIBUF寄存器,进行发送和接收数据。
•写下一个数据到SPIDAT1寄存器前,用户必须等待TXFULL 复位或TXINT。
•从SPIBUF寄存器读取数据之前,用户必须等待 RXEMPTY 复位或RXINT三、HALCoGen初始化的了解
SPI Global Control Register 1 (SPIGCR1)-Bit0
SPIGCR1[1]:CLKMOD 时钟模式
SPIGCR1[0]:MASTER 主,从机模式
SPI Interrupt Register (SPIINT0)
SPIINT0[24] :ENABLE HIGHZ SPIENA脚高阻抗使能
SPI Interrupt Register (SPIINT0)
SPIINT0[9]:TXINT 发送中断。
SPIINT0[8]:RXINT 接收中断。
SPIINT0[6]:OVRNINT 接收溢出中断。
SPIINT0[4]:BITERR 位错误中断。
SPIINT0[3]:DESYNC 无法同步从机中断。 (主模式)
SPIINT0[2]:PARERR 奇偶错误中断
SPIINT0[1]:TIMEOUT SPIENA引脚超时中断。
SPIINT0[0]:DLNERR 数据长度错误中断(线)选择。SPI Interrupt Level Register (SPILVL)
SPILVL[9]:TXINTLVL 发送中断级
SPILVL[8]:RXINTLVL 接收中断级
SPILVL[6]:RXOVRNINTLVL 接收溢出中断级
SPILVL[4]:BITERRLVL 位错误中断级
SPILVL[3]:DESYNCLVL 无法同步从机中断级。 (主模式)
SPILVL[2]:PARERRLVL 奇偶错误中断级
SPILVL[1]:TIMEOUTLVL SPIENA引脚超时中断级。
SPILVL[0]:DLENERRLVL 数据长度错误中断级(线)选择。SPI Data Format Registers (SPIFMT)
Shift LSB first SPIFMT[20]:SHIFTDIR 数据格式x移位方向
Wait for Enable SPIFMT[21]:WAITENA 主站等待从站的数据格式XENA信号
Parity enable SPIFMT[22]: PARITYENA 数据格式x奇偶使能。
Odd parity SPIFMT[23]: PARPOL 奇偶极性
Clock Polarity SPIFMT[17]: POLARITY SPI数据格式x时钟极性
Clock Phase SPIFMT[16]: PHASE SPI数据格式x时钟延迟Wdelay SPIFMT[31..24]:WDELAY 传输的数据格式X(X=0,1,2,3)之间延迟
Charlen SPIFMT[4..0]: CHARLEN SPI数据格式x的数据字的长度
Baudrate Brformatx=VCLK1/(PRESCALEx+1);SPICLK(VCLK) 波特率SPI Delay Register (SPIDELAY)
SPIDELAY[31..24]:C2TDELAY:片选激活发送开始
SPIDELAY[23..16]:T2CDELAY:发送结束片选无效
SPIDELAY[ 7..0 ]:C2EDELAY:片选ENA超时
SPIDELAY[15..8 ]:T2EDELAY:发送完成ENA无效超时SPI Pin Control Register 0 (SPIPC0) GIO或SPI功能选择脚
SPI Pin Control Register 1 (SPIPC1) SPI功能脚方向
SPI Pin Control Register 2 (SPIPC2) 读SPI功能脚电平
SPI Pin Control Register 3 (SPIPC3) 写SPI读功能脚电平
SPI Pin Control Register 4 (SPIPC4) 置位SPI功能脚
SPI Pin Control Register 5 (SPIPC5) 清除SPI功能脚
SPI Pin Control Register 6 (SPIPC6) SPI功能脚开漏使能
SPI Pin Control Register 7 (SPIPC7) SPI功能脚拉控制启用/禁用
SPI Pin Control Register 8 (SPIPC8) SPI功能脚上,下拉选择