blob: d7c200c77f1dbf64393998499e06d0c5a126b4b5 [file] [log] [blame]
#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();
}