主题中讨论的其他器件:AM6442、
工具/软件:
您好:
我们使用连接到 MPU AM6442 SPI 总线的 DAC60508ZC 器件。 对于 SPI 线路、当我们开始在 SPI 总线上进行通信时、我们可以看到 CS 变为低电平、并且 SCK 和 MOSI 会相应地切换。 由于此芯片不支持 SDO 功能、我们无法确认写入是否成功、也无法读取器件 ID。
我们已确保在 GAIN 寄存器中为通道 0 至 3 和通道 4 至 7 写入 CLR-MSK 位、还确保在芯片的 REF 引脚中生成了 2.5V 的内部基准电压。
下面是我们要写入的寄存器序列
1、将值 0x0 写入 CONFIG 寄存器
2.用 0xFF 写入增益寄存器
3.将数据写入 DAC 通道
4. 将 TRIGGER 寄存器的第 4 个引脚设为 1
借助所有这些寄存器设置、我们也无法看到生成的 Vout、它始终看起来为 0V。 还附加了代码片段以供您参考。
您能否确认写入寄存器的顺序是否正确、或者需要对序列进行任何更改。
如果您为此芯片提供任何 BareMetal 或 c 代码示例、将会很有帮助。
下面是我们应用的代码片段:
#include
#include
#include
#include
#include
#include
#define SPI_DEV“/dev/spidev2.0
#define SPI_MODE SPI_MODE_0
#define SPI_SPEED 1000000 // 1MHz
#define SPI_BITS8
// DAC60508 寄存器地址
#define REG_NOP 0x00
#define REG_DEVICE_CONFIG 0x01
#define REG_SHDN 0x02
#define REG_CONFIG 0x03
#define REG_GAIN 0x04
#define REG_TRIGGER 0x05
#define REG_STATUS 0x07
#define REG_DAC_BASE 0x08 // DAC0 = 0x08、DAC7 = 0x0F
//辅助函数:通过 SPI 写入 3 个字节
static int SPI_write_reg(int fd、uint8_t addr、uint16_t 值)
{
uint8_t tx[3];
t[0]= addr;
TX[1]=(值>> 8)和 0xFF;
TX[2]=值和 0xFF;
返回写入 (FD、TX、3);
}
内部 main (void)
{
INT FD = OPEN (SPI_DEV、O_RDWR);
if (FD < 0){
perror(“open spi_dev“);
返回 1;
}
uint8_t mode = SPI_mode;
uint32_t speed = spi_speed;
uint8_t bits = SPI_bits;
ioctl (fd、SPI_IOC_WR_MODE、&MODE);
ioctl (FD、SPI_IOC_WR_BITS_PER_WORD、&bits);
ioctl (fd、SPI_IOC_WR_MAX_SPEED_HZ、&SPEED);
printf(“Initializing DAC60508...\n“);
// 1。 启用内部基准
//位 15 = REF_PWDWN(0 =启用)
SPI_WRITE_reg (FD、REG_CONFIG、0x0000);
uleep(10000);//以稳定为参考延迟 10 ms
// 2. 将所有通道的增益设置为×2
//位[15:8]= DAC7–DAC0 的增益;0 =×1、1 =×2
//示例:所有 8 个通道为 0xFFFF→×2 增益
SPI_WRITE_reg (FD、REG_GAIN、0x0FFF);
// 3. 向所有 8 个 DAC 通道 (0x08–0x0F) 写入中量程 (0x8000)
uint16_t 中标度= 0x8000;
对于 (uint8_t ch = 0;ch < 8;ch++){
SPI_WRITE_reg(FD、REG_DAC_BASE + ch,中标度);
}
// 4. 通过软件触发 LDAC 更新
SPI_write_reg (fd、REG_TRIGGER、0x0010);//将寄存器 0x05 中的 LDAC 设置为 1 4 th 位
printf(“全部 8 个通道均更新为×2 增益的中标度 (0x8000)。\n“);
printf((“预期的 VOUT≈2.5V (用于 2.5V 内部基准)。(。\n“);
关闭 (FD);
返回 0;
}

