| #include "spi.h" |
| |
| #define Dummy_Byte 0xA5 |
| |
| #define MFRC500_CS_LOW() SPI_SELECT_CH1() |
| #define MFRC500_CS_HIGH() SPI_DESELECT_CH1() |
| |
| #define MFRC500_RST_LOW() GPIO_ResetBits(GPIOC, GPIO_Pin_6) |
| #define MFRC500_RST_HIGH() GPIO_SetBits(GPIOC, GPIO_Pin_6) |
| |
| /* |
| ************************************************************************************************************** |
| * ÑÓ Ê± º¯ Êý uS |
| * ×¢ Ò⣺ ¾«¶ÈÎÊÌâ |
| ************************************************************************************************************** |
| */ |
| void HW_SleepUs(uint16_t us) |
| { |
| uint32_t i; |
| |
| for( i = 0; i < 6 * us; i++); |
| } |
| |
| /* |
| ************************************************************************************************************** |
| * ÑÓ Ê± º¯ Êý mS |
| * ×¢ Ò⣺ ¾«¶ÈÎÊÌâ |
| ************************************************************************************************************** |
| */ |
| void HW_SleepMs(uint16_t ms) |
| { |
| uint32_t i; |
| |
| for( i = 0; i < 3361 * ms; i++ ); |
| } |
| |
| /* |
| ************************************************************************************************************** |
| * RF SPI Åä Öà ³õ ʼ »¯ |
| * |
| ************************************************************************************************************** |
| */ |
| void HW_SPI_RF_CfgInit(void) |
| { |
| GPIO_InitTypeDef GPIO_InitStructure; |
| |
| RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); |
| GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; |
| GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; |
| GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; |
| GPIO_Init(GPIOC, &GPIO_InitStructure); |
| MFRC500_RST_HIGH(); |
| spi_init(); |
| } |
| |
| uint8_t spi_rc500_send_byte(uint8_t byte) |
| { |
| return spi_transive(byte, 100); |
| } |
| |
| |
| /* |
| ************************************************************************************************************** |
| * P C D ¶Á Ò» ¸ö ×Ö ½Ú |
| * |
| * Ò» °ã ¶Á |
| * |
| ************************************************************************************************************** |
| */ |
| uint8_t ReadRawRC(uint8_t addr) |
| { |
| u8 i; |
| |
| addr = ((addr<<1)|0x80)&0xfe; |
| MFRC500_CS_LOW(); |
| spi_rc500_send_byte(addr); |
| i = spi_rc500_send_byte(Dummy_Byte); |
| MFRC500_CS_HIGH(); |
| return i; |
| } |
| |
| /* |
| ************************************************************************************************************** |
| * P C D д Ò» ¸ö ×Ö ½Ú |
| * |
| * Ò» °ã д |
| * |
| ************************************************************************************************************** |
| */ |
| void WriteRawRC(uint8_t value, uint8_t addr) |
| { |
| addr = (addr << 1) & 0x7e; |
| MFRC500_CS_LOW(); |
| spi_rc500_send_byte(addr); |
| spi_rc500_send_byte(value); |
| MFRC500_CS_HIGH(); |
| } |
| |
| void MFRC500_RstSet(void) |
| { |
| MFRC500_RST_HIGH(); |
| } |
| |
| void MFRC500_RstClr(void) |
| { |
| MFRC500_RST_LOW(); |
| } |
| |