lugl4313820 发表于 2023-2-4 08:09
建议你买一块开发板,他们会附带教程的。然后你跟着例程写一篇,然后自己再写一篇。先用摸拟的写一篇,再用 ...
您好,我现在在用st的开发板上午看了读写寄存器的内容,明白了我要做的内容,是读写另一个芯片上的9个寄存器,有三个收发通道,通过16位进行读取。0-9可读,0-1-3寄存器可写,标准spi时序,指令+地址+内容。
我是这样做的,不知道对不对。
还有我想知道逻辑层的调用函数应该怎么写呢?(当我选择不同的通道时,返回16位的读取内容。)
还有验证读写是否一致打印函数,应该要怎么去实现呢?
很抱歉有些打扰,因为我C语言刚入门,嵌入式也是刚开始,有些地方很迷惑,没有形成流畅的思维吧。
//指令集
#define ACPL_Read 0x09 //读取寄存器指令码
#define ACPL_Write 0x0A //写入寄存器指令码
typedef enum
{addr_Filter_Setting = 0x00
addr_Channel_Select = 0x01
addr_Interrupt_Status = 0x02 addr_Interrupt_Enable = 0x03
addr_Channel1_MSB = 0x04
addr_Channel1_LSB = 0x05
addr_Channel2_MSB = 0x06
addr_Channel2_LSB = 0x07
addr_Channel3_MSB = 0x08
addr_Channel3_LSB = 0x09
}ACPL_RegisterAddr;
/*********************************************
* 读取寄存器,0-9可读
* BIT 7 6 5 4 3 2 1 0
*********************************************/
u8 ACPL_Read_Value(u8 ACPL_RegisterAddr)
{
u16 temp = 0;
SPI_FlASH_CS_LOW(); //使能片选信号,开始操作
SPI5_ReadWriteByte(ACPL_Read|ACPL_RegisterAddr); //写入cmd+地址
temp|=SPI5_ReadWriteByte(0Xff);
temp<<=8;
temp|=SPI5_ReadWriteByte(0Xff); //读两次,合并16位
SPI_FLASH_CS_HIGH();
return temp;
}
/*********************************************
* 写入寄存器,只有三个寄存器是可写的————寄存器0,1,3
* BIT 7 6 5 4 3 2 1 0
*********************************************/
_Write_Filter_Setting(u8 ACPL_RegisterAddr,u8 value)
{
SPI_FLASH_CS_LOW();
SPI5_ReadWriteByte(ACPL_Write|ACPL_RegisterAddr); //SPI写地址命令-寄存器0
SPI5_ReadWriteByte(value); //SPI写数据
SPI_FLASH_CS_HIGH();
}
|