我是 XMC 领域的新手,正在尝试与 mfrc522
通信,谁能指出我的代码哪里出了问题,我试了很多次都无法与 mfrc522 连接。
以下是我的 SPI 设置和引脚布局
XMC_USIC_CH_t *spi_master_ch = XMC_SPI0_CH0;
//Master Mode U1C0
XMC_GPIO_CONFIG_t master_rx_pin_config;
XMC_GPIO_CONFIG_t master_tx_pin_config;
XMC_GPIO_CONFIG_t master_selo_pin_config;
XMC_GPIO_CONFIG_t master_clck_pin_config;
XMC_GPIO_PORT_t *master_rx_pin = XMC_GPIO_PORT1;
XMC_GPIO_PORT_t *master_tx_pin = XMC_GPIO_PORT1;
XMC_GPIO_PORT_t *master_selo_pin = XMC_GPIO_PORT0;
XMC_GPIO_PORT_t *master_clck_pin = XMC_GPIO_PORT0;
XMC_SPI_CH_CONFIG_t spi_config_masterMode;
int main(空白)
{
主机模式
/*SPI 配置*/
spi_config_masterMode.baudrate = 200000; //100000;
spi_config_masterMode.bus_mode = XMC_SPI_CH_BUS_MODE_MASTER;
spi_config_masterMode.selo_inversion = XMC_SPI_CH_SLAVE_SEL_INV_TO_MSLS;
spi_config_masterMode.parity_mode = XMC_USIC_CH_PARITY_MODE_NONE;
/*初始化 SPI*/
XMC_SPI_CH_Init(spi_master_ch, spi_config_masterMode);
XMC_SPI_CH_DisableFEM(spi_master_ch);
XMC_SPI_CH_SetBitOrderMsbFirst(spi_master_ch);
XMC_SPI_CH_SetWordLength(spi_master_ch, 8); //16
XMC_SPI_CH_SetFrameLength(spi_master_ch, (uint8_t)64);
/* 配置时钟极性和时钟延迟 */
XMC_SPI_CH_ConfigureShiftClockOutput(spi_master_ch、
已启用 xmc_spi_ch_brg_shift_clock_passive_level_0_delay_enabled、
xmc_spi_ch_brg_shift_clock_output_sclk);
/* 配置前导/后导延迟 */
XMC_SPI_CH_SetSlaveSelectDelay(spi_master_ch, 2U);
/*已选择输入源*/
XMC_SPI_CH_Se
tinputSource(spi_master_ch, XMC_SPI_CH_INPUT_DIN0 ,USIC0_C0_DX0_P1_1); //P1.1 MasterInSlaveOut MISO_USIC0_CH0.DX0D
GPIO 配置
master_rx_pin_config.mode = XMC_GPIO_MODE_INPUT_TRISTATE;
XMC_GPIO_Init(master_rx_pin, 1, master_rx_pin_config);
GPIO 配置
master_tx_pin_config.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT7;
XMC_GPIO_Init(master_tx_pin, 0, master_tx_pin_config); //P1.0 主输出从输入 MOSI_USIC0_CH0.DOUT0
/*GPIO 从站选择线路引脚配置*/
master_selo_pin_config.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT6;
XMC_GPIO_Init(master_selo_pin, 13, master_selo_pin_config); //P0.13 ChipSelect_USIC0_CH0.SELO4
GPIO 配置
master_clck_pin_config.mode = XMC_GPIO_MODE_OUTPUT_PUSH_PULL_ALT6; //P0.7 Clock_USIC0_CH0.SCLKOUT
XMC_GPIO_Init(master_clck_pin, 7, master_clck_pin_config);
/*启动 SPI*/
XMC_SPI_CH_Start(spi_master_ch);
/* 启动 RC522 */
MFRC522_Init();
而 (1U)
{
如果 (MFRC522_Check(CardID) == MI_OK)
{
XMC_GPIO_ToggleOutput(LED0);
}
}
下面是 RC522 修改后的代码:
外接 XMC_USIC_CH_t *spi_master_ch;
uint16_t SPI1SendByte(uint16_t data) {
uint16_t uiDataReceived = 0x00;
//XMC_SPI_CH_EnableSlaveSelect(spi_master_ch, XMC_SPI_CH_SLAVE_SELECT_4);
XMC_SPI_CH_Transmit(spi_master_ch, data, XMC_SPI_CH_MODE_STANDARD);
/*等待字节传送完毕*/
while((XMC_SPI_CH_GetStatusFlag(spi_master_ch) XMC_SPI_CH_STATUS_FLAG_TRANSMIT_SHIFT_INDICATION) ==0U)
{
/* 等待 ACK */
}
XMC_SPI_CH_ClearStatusFlag(spi_master_ch,XMC_SPI_CH_STATUS_FLAG_TRANSMIT_SHIFT_INDICATION);
//XMC_SPI_CH_DisableSlaveSelect(spi_master_ch);
// while((XMC_SPI_CH_GetStatusFlag(spi_master_ch) (XMC_SPI_CH_STATUS_FLAG_RECEIVE_INDICATION |)
// xmc_spi_ch_status_flag_alternative_receive_indication)) ==0u)
// {
// /* 等待 ACK */
// }
uiDataReceived = XMC_SPI_CH_GetReceivedData(spi_master_ch);
返回 uiDataReceived;
}
uint16_t test4=0;
void SPI1_WriteReg(uint8_t address, uint8_t value) {
// cs_reset();
XMC_SPI_CH_EnableSlaveSelect(spi_master_ch, XMC_SPI_CH_SLAVE_SELECT_4);
SPI1SendByte(address);
SPI1SendByte(value);
XMC_SPI_CH_DisableSlaveSelect(spi_master_ch);
// cs_set();;
}
uint8_t SPI1_ReadReg(uint8_t address) {
uint8_t val;
// cs_reset();
XMC_SPI_CH_EnableSlaveSelect(spi_master_ch, XMC_SPI_CH_SLAVE_SELECT_4);
SPI1SendByte(address);
val = SPI1SendByte(0x00);
XMC_SPI_CH_DisableSlaveSelect(spi_master_ch);
// cs_set();
return val;
}