工具/软件:Starterware
我在使用 CS0读取 SPI 1中的数据时遇到问题。
我正在使用 bb 和 starterware。
我只想向从器件寄存器发送一个字节并读取该字节。
发送是可以的、但当我尝试读取数据时、我无法。 我看到示波器、CS、MOSI 和 MISO 中的信号看起来不错、我需要的数据在那里、但我无法从 bbb 寄存器读取。
我的设置函数包括:
/*
**将时钟配置为 SPI
*
静态空 McSPI1ModuleClkConfig (void){
HWREG (SOC_CM_PER_REGS + CM_PER_L3S_CLKSTCTRL)=
CM_PER_L3S_CLKSTCTRL_CLKTRCTRL_SW_WKUP;
while ((HWREG (SOC_CM_PER_regs + CM_PER_L3S_CLKSTCTRL)和
CM_PER_L3S_CLKSTCTRL_CLKTRCTRL)!= CM_PER_L3S_CLKSTCTRL_CLKTRCTRL_SW_WKUP);
HWREG (SOC_CM_PER_regs + CM_PER_L3_CLKSTCTRL)=
CM_PER_L3_CLKSTCTRL_CLKTRCTRL_SW_WKUP;
while ((HWREG (SOC_CM_PER_regs + CM_PER_L3_CLKSTCTRL)和
CM_PER_L3_CLKSTCTRL_CLKTRCTRL)!= CM_PER_L3_CLKSTCTRL_CLKTRCTRL_SW_WKUP);
HWREG (SOC_CM_PER_REGS + CM_PER_L3_INSTR_CLKCTRL)=
CM_PER_L3_INSTR_CLKCTRL_MODULEMODE_ENABLE;
while ((HWREG (SOC_CM_PER_Regs + CM_PER_L3_INSTR_CLKCTRL)和
CM_PER_L3_INSTR_CLKCTRL_MODULEMODE)!=
CM_PER_L3_INSTR_CLKCTRL_MODULEMODE_ENABLE);
HWREG (SOC_CM_PER_Regs + CM_PER_L3_CLKCTRL)=
CM_PER_L3_CLKCTRL_MODULEMODE_ENABLE;
while ((HWREG (SOC_CM_PER_regs + CM_PER_L3_CLKCTRL)和
CM_PER_L3_CLKCTRL_MODULEMODE)!= CM_PER_L3_CLKCTRL_MODULEMODE_ENABLE);
HWREG (SOC_CM_PER_REGS + CM_PER_OCPWP_L3_CLKSTCTRL)=
CM_PER_OCPWP_L3_CLKSTCTRL_CLKTRCTRL_SW_WKUP;
while ((HWREG (SOC_CM_PER_regs + CM_PER_OCPWP_L3_CLKSTCTRL)和
CM_PER_OCPWP_L3_CLKSTCTRL_CLKTRCTRL)!=
CM_PER_OCPWP_L3_CLKSTCTRL_CLKTRCTRL_SW_WKUP);
HWREG (SOC_CM_PER_REGS + CM_PER_L4LS_CLKSTCTRL)=
CM_PER_L4LS_CLKSTCTRL_CLKTRCTRL_SW_WKUP;
while ((HWREG (SOC_CM_PER_regs + CM_PER_L4LS_CLKSTCTRL)和
CM_PER_L4LS_CLKSTCTRL_CLKTRCTRL)!=
CM_PER_L4LS_CLKSTCTRL_CLKTRCTRL_SW_WKUP);
HWREG (SOC_CM_PER_REGS + CM_PER_L4LS_CLKCTRL)=
CM_PER_L4LS_CLKCTRL_MODULEMODE_ENABLE;
while ((HWREG (SOC_CM_PER_regs + CM_PER_L4LS_CLKCTRL)和
CM_PER_L4LS_CLKCTRL_MODULEMODE)!= CM_PER_L4LS_CLKCTRL_MODULEMODE_ENABLE);
HWREG (SOC_CM_PER_REGS + CM_PER_SPI1_CLKCTRL)&&=~CM_PER_SPI1_CLKCTRL_MODULEMODE;
HWREG (SOC_CM_PER_REGS + CM_PER_SPI1_CLKCTRL)|= CM_PER_SPI1_CLKCTRL_MODULEMODE_ENABLE;
while ((HWREG (SOC_CM_PER_regs + CM_PER_SPI1_CLKCTRL)和
CM_PER_SPI1_CLKCTRL_MODULEMODE)!= CM_PER_SPI1_CLKCTRL_MODULEMODE_ENABLE);
while (!(HWREG (SOC_CM_PER_regs + CM_PER_L3S_CLKSTCTRL)&
CM_PER_L3S_CLKSTCTRL_CLKACTIVITY_L3S_GCLK);
while (!(HWREG (SOC_CM_PER_Regs + CM_PER_L3_CLKSTCTRL)和
CM_PER_L3_CLKSTCTRL_CLKACTIVITY_L3_GCLK);
while (!(HWREG (SOC_CM_PER_Regs + CM_PER_OCPWP_L3_CLKSTCTRL)和
(CM_PER_OCPWP_L3_CLKSTCTRL_CLKACTIVITY_OCPWP_L3_GCLK |
CM_PER_OCPWP_L3_CLKSTCTRL_CLKACTIVITY_OCPWP_L4_GCLK)));
while (!(HWREG (SOC_CM_PER_regs + CM_PER_L4LS_CLKSTCTRL)和
(cm_per_L4LS_CLKSTCTRL_CLKACTIVITY_L4LS_GCLK |
CM_PER_L4LS_CLKSTCTRL_CLKACTIVITY_SPI_GCLK));
}
/*
**此函数将调用必要的 McSPI API,这些 API 将配置
** McSPI 控制器。
*
静态空 McSPISetUp (空){
/*重置 McSPI 实例。*/
McSPIReset (SOC_SPI_1_regs);
/*启用芯片选择引脚。*/
McSPICSEnable (SOC_SPI_1_regs);
/*启用主操作模式。*/
McSPIMasterModeEnable (SOC_SPI_1_regs);
/********* /
//cs0
McSPIMasterModeConfig (SOC_SPI_1_regs、MCSPI_SINGLE_CH、
MCSPI_TX_RX_MODE、MCSPI_DATA_LINE_COMM_MODE_1、
0);
McSPIClkConfig (SOC_SPI_1_regs、MCSPI_IN_CLK、MCSPI_OUT_FREQ、0、
MCSPI_CLK_MODE_0);
McSPIWordLengthSet (SOC_SPI_1_regs、MCSPI_WORD_LENGTH (8)、0);
McSPICSPPolarityConfig (SOC_SPI_1_regs、MCSPI_CS_POL_LOW、0);
McSPITxFIFOConfig (SOC_SPI_1_regs、MCSPI_TX_FIFO_ENABLE、0);//para de enegar Dados no CS1
McSPIRxFIFOConfig (SOC_SPI_1_regs、MCSPI_RX_FIFO_ENABLE、0);
/ /
}
/*
**此函数选择使用 McSPI 引脚。 McSPI 引脚
* 与 SoC 中其他外设的引脚进行多路复用
*
静态空 McSPI1PinMuxSetup (void){
/*
CONTACT_CONF_McASP0_FSX -> d0
CONTROL_CONF_McASP0_AXR0 -> D1
CONTRAL_CONF_McASP0_ACLKX -> clk*/
HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_McASP0_ACLKX)= 0x33;
HWREG (SOC_CONTRAL_REGS + CONTRAL_CONF_McASP0_FSX)= 0x33;
HWREG (SOC_CONTROL_REGS + CONTROL_CONF_McASP0_AXR0)= 0x33;
}
/*
**将时钟配置为 SPI
*
静态空 McSPI1CSPinMuxSetup(){
HWREG (SOC_CONTRAL_REGS + CONTRAL_UART_RTSN (0))= 0xD;//SPI_1-CS_0
HWREG (SOC_CONTRAL_REGS + CONTRAL_UART_RTSN (1))= 0xC;//SPI_1-CS_1
}
/*
**此功能将激活/停用 CS 线路,并启用 Tx 和 Rx
** McSPI 外设的中断。
*
unsigned char McSPIRead (unsigned char reg、unsigned int channel){
P_TX = txBuffer;
P_Rx = rxBuffer;
length = size;
ConsoleUtilsPrintf ("\n\rMcSPI 读取长度:%x",长度);
/* SPIEN 线被迫处于低电平状态。*/
McSPICSAssert (SOC_SPI_1_regs、通道);
/*启用 McSPI 通道进行通信。*/
McSPIChannelEnable (SOC_SPI_1_regs、通道);
/********* /
McSPITransmitData (SOC_SPI_1_regs、(unsigned int)(reg)、channel);
*lData++=(unsigned char) McSPIReceiveData (SOC_SPI_1_regs、channel);
McSPITransmitData (SOC_SPI_1_regs、(unsigned int)(0x00)、channel);//teste remotre segunda escrisa//NAO funfa
*lData++=(unsigned char) McSPIChannelStatusGet (SOC_SPI_1_regs、channel);
/ /
/*强制 SPIEN 线进入非活动状态。*/
McSPICSDeAssert (SOC_SPI_1_regs、通道);
/*禁用 McSPI 通道。*/
McSPIChannelDisable (SOC_SPI_1_regs、channel);
返回0;
}