1. 创龙DSP6748开发板驱动TL5724这个DAC,输出指定的电压值,此程序是使用 IO 口模拟 SPI 实现与 TL5724 模块的数据交互。
2. 首先是初始化PSC函数
void PSCInit(void) {// 使能 GPIO 模块 PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE); }
2. DAC的读写函数
// 管脚复用配置 GPIOBankPinMuxSet(); ConfigAD5754R(); // 输出电压配置 cstr = DAC_Register | DAC_Channel_A | DACOut(3, 10); WriteToAD5754RViaSpi(&cstr);
3. GPIO的配置
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(4)) = (0x80000000); HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(5)) = (0x00880800); HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(13)) = (0x00000080); // 配置管脚为输出状态 GPIODirModeSet(SOC_GPIO_0_REGS, 17, GPIO_DIR_OUTPUT); // GPIO6[2] GPIODirModeSet(SOC_GPIO_0_REGS, 111, GPIO_DIR_OUTPUT); // GPIO6[7] GPIODirModeSet(SOC_GPIO_0_REGS, 43, GPIO_DIR_OUTPUT); // GPIO2[10] GPIODirModeSet(SOC_GPIO_0_REGS, 44, GPIO_DIR_INPUT); // GPIO2[11] GPIODirModeSet(SOC_GPIO_0_REGS, 46, GPIO_DIR_OUTPUT); // GPIO2[13] // LDAC GPIOPinWrite(SOC_GPIO_0_REGS, 111, GPIO_PIN_LOW); // LDAC GPIOPinWrite(SOC_GPIO_0_REGS, 46, GPIO_PIN_LOW); // CLK GPIOPinWrite(SOC_GPIO_0_REGS, 43, GPIO_PIN_HIGH); // SDIN GPIOPinWrite(SOC_GPIO_0_REGS, 17, GPIO_PIN_HIGH); // SYNC
4. 其实读写都是模拟的GPIO而已
void WriteToAD5754RViaSpi(int *RegisterData) { int ValueToWrite = *RegisterData; int i; // SPI start SET_SYNC(); delay(10); CLR_SYNC(); // bring CS low delay(1); // Write out the ControlWord for(i = 0; i < 24; i++) { SET_SCLK(); delay(5); if(0x800000 == (ValueToWrite & 0x800000)) { SET_SDIN(); //Send one to SDI pin } else { CLR_SDIN(); //Send zero to SDI pin } delay(5); CLR_SCLK(); delay(5); ValueToWrite <<= 1; //Rotate data delay(5); } // SPI ends SET_SYNC(); delay(10); }
5. 插上子板卡,烧写程序,测试,用万用表量下电压,对比串口输出的电压值换算一下。