gpt4 book ai didi

c - 为微 Controller 编写设备驱动程序,在哪里定义 IO 端口引脚?

转载 作者:太空狗 更新时间:2023-10-29 15:56:21 26 4
gpt4 key购买 nike

在为 MCU 编写低级代码时,我似乎总是遇到这种困境。我永远不知道在哪里声明引脚定义以使代码尽可能可重用。

在这种情况下,我正在编写一个驱动程序以将 8051 连接到 MCP4922 12 位串行 DAC。我不确定我应该如何/在何处声明 DAC 的 CS(芯片选择)和 LDAC(数据锁存器)的引脚定义。目前在驱动程序的头文件中声明。

我做了很多研究试图找出最好的方法,但还没有真正找到任何东西。

我基本上想知道最佳实践是什么...如果有一些值得阅读的书籍或在线信息、示例等,欢迎提出任何建议。

只需一小段驱动程序,让您明白

/**
@brief This function is used to write a 16bit data word to DAC B -12 data bit plus 4 configuration bits
@param dac_data A 12bit word
@param ip_buf_unbuf_select Input Buffered/unbuffered select bit. Buffered = 1; Unbuffered = 0
@param gain_select Output Gain Selection bit. 1 = 1x (VOUT = VREF * D/4096). 0 =2x (VOUT = 2 * VREF * D/4096)
*/
void MCP4922_DAC_B_TX_word(unsigned short int dac_data, bit ip_buf_unbuf_select, bit gain_select)
{

unsigned char low_byte=0, high_byte=0;
CS = 0; /**Select the chip*/

high_byte |= ((0x01 << 7) | (0x01 << 4)); /**Set bit to select DAC A and Set SHDN bit high for DAC A active operation*/
if(ip_buf_unbuf_select) high_byte |= (0x01 << 6);
if(gain_select) high_byte |= (0x01 << 5);

high_byte |= ((dac_data >> 8) & 0x0F);
low_byte |= dac_data;
SPI_master_byte(high_byte);
SPI_master_byte(low_byte);

CS = 1;
LDAC = 0; /**Latch the Data*/
LDAC = 1;
}

最佳答案

这是我在类似案例中所做的,此示例用于编写 I²C 驱动程序:

// Structure holding information about an I²C bus
struct IIC_BUS
{
int pin_index_sclk;
int pin_index_sdat;
};

// Initialize I²C bus structure with pin indices
void iic_init_bus( struct IIC_BUS* iic, int idx_sclk, int idx_sdat );

// Write data to an I²C bus, toggling the bits
void iic_write( struct IIC_BUS* iic, uint8_t iicAddress, uint8_t* data, uint8_t length );

所有管脚索引都在依赖于应用程序的头文件中声明,以便快速浏览,例如:

// ...
#define MY_IIC_BUS_SCLK_PIN 12
#define MY_IIC_BUS_SCLK_PIN 13
#define OTHER_PIN 14
// ...

在此示例中,I²C 总线实现是完全可移植的。它只依赖于一个可以通过索引写入芯片管脚的API。

编辑:

这个驱动是这样使用的:

// main.c
#include "iic.h"
#include "pin-declarations.h"

main()
{
struct IIC_BUS mybus;
iic_init_bus( &mybus, MY_IIC_BUS_SCLK_PIN, MY_IIC_BUS_SDAT_PIN );

// ...

iic_write( &mybus, 0x42, some_data_buffer, buffer_length );
}

关于c - 为微 Controller 编写设备驱动程序,在哪里定义 IO 端口引脚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2921239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com