工具/软件:Code Composer Studio
我正在为测试信号发生器编写一些测试代码。 我将使用 MCP4725芯片生成模拟电压(稍后将使用 MCP4728)。 我将我想要的12位值写入芯片寄存器、并在以后读取时预期读取相同的值、但情况是这样的。
当我步入 MCP4725SendReceive 函数时、它会起作用、但当我单步执行时、它不会起作用。
有什么想法吗? 我尝试了很多延迟。
#include #include #include "driverlib/fpu.h" #include "driverlib/gpio.h" #include "driverlib/i2c.h" #include "driverlib/pin_map.h" #include "driverlib/rom.h" #include "driverlib/sysctl.h" #include "driverlib/uart.h" #include "hw_intrinc/包含"#hw_hw_gpio.h"#include "#include "#include "#include "#"#include "inc/intrintrinc/包含"#"hw.hw_inc"#.hw_inc" // //系统配置。 //// ***************** uint32_t G_ui32SysClock; //保持主时钟速度 //********* //// 初始 UART 接口115200bps、8、N、1/// ********* void InitUART (void) { SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOA)) { } GPIOPinConfigure (GPIO_PA0_U0RX); GPIOPinConfigure (GPIO_PA1_U0TX); SysCtlPeripheralEnable (SYSCTL_Periph_UART0); while (!SysCtlPeripheralReady (SYSCTL_Periph_UART0)) { } UARTClockSourceSet (UART0_BASE、UART_CLOCK_PIOSC); GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1); UARTStdioConfig (0、115200、16000000); } //********* // //初始化 DAC 芯片 // //********* void MCP4725Init (void) { UARTprintf ("正在启动。\n"); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD); while (!SysCtlPeripheralReady (SYSCTL_Periph_GPIOD)); GPIOPinConfigure (GPIO_PD0_I2C7SCL); GPIOPinConfigure (GPIO_PD1_I2C7SDA); GPIOPinTypeI2CSCL (GPIO_PORTD_BASE、GPIO_PIN_0); GPIOPinTypeI2C (GPIO_PORTD_base、GPIO_PIN_1); SysCtlPeripheralDisable (SYSCTL_Periph_I2C7); SysCtlPeripheralReset (SYSCTL_Periph_I2C7); SysCtlPeripheralEnable (SYSCTL_Periph_I2C7); while (!SysCtlPeripheralReady (SYSCTL_Periph_I2C7)) { } I2CMasterGlitchFilterConfigSet (I2C7 _BASE、I2C_MASTER_毛 刺脉冲_FILTER_8); I2CMasterInitExpClk (I2C2_base、g_ui32SysClock、false); } //********* // //更新 DAC 输出,然后读回输出寄存器 // ********* uint16_t MCP4725SendReceive (uint16_t loadvalue) { uint8_t pui8WriteData[2]; uint8_t pui8ReadData[5]; uint16_t readvalue; // //将所需的值写入 DAC 寄存器 //请参阅 mcp4725数据表第6.1.1节 // pui8WriteData[0]=(uint8_t)((loadvalue >> 8)& 0xF); pui8WriteData[1]=(uint8_t)(loadvalue); I2CMasterSlaveAddrSet (I2C7 _BASE、0x62、false); I2CMasterDataPut (I2C2_base、pui8WriteData[0]);//第一个字节 I2CMasterControl (I2C4_base、I2C_MASTER_CMD_BURST_SEND_START);//开始发送 while (I2CMasterBusy (I2C7 _BASE));//等待完成 if (I2CMasterErr (I2C4_base)!= I2C_MASTER_ERR_NONE)//检查是否有错误 { UARTprintf ("I2C 错误\n"); } I2CMasterDataPut (I2C2_base、pui8WriteData[1]);//第二个字节 I2CMasterControl (I2C4_base、I2C_MASTER_CMD_BURST_SEND_FINISH);//开始发送 while (I2CMasterBusy (I2C7 _BASE));//等待完成 if (I2CMasterErr (I2C4_base)!= I2C_MASTER_ERR_NONE)//检查是否有错误 { UARTprintf ("I2C 错误\n"); } //rom_SysCtlDelay (100000000);//尝试在这里放置一个大延迟、它不会更改结果 // //从芯片读取寄存器。 //请参阅 mcp4725数据表第6.2节 // I2CMasterSlaveAddrSet (I2C7 _BASE、0x62、TRUE); //图6.3的字节2 (实际上、第一个要读取的字节) I2CMasterControl (I2C4_base、I2C_MASTER_CMD_BURST_Receive_start); while (I2CMasterBusy (I2C7 _BASE)); pui8ReadData[0]= I2CMasterDataGet (I2C7 _BASE); if (I2CMasterErr (I2C4_base)!= I2C_MASTER_ERR_NONE) UARTprintf ("I2C 错误\n"); //图6.3的字节3 I2CMasterControl (I2C4_base、I2C_MASTER_CMD_BURST_Receive_contt); while (I2CMasterBusy (I2C7 _BASE)); pui8ReadData[1]= I2CMasterDataGet (I2C7 _BASE); if (I2CMasterErr (I2C4_base)!= I2C_MASTER_ERR_NONE) UARTprintf ("I2C 错误\n"); //图6.3的字节4 I2CMasterControl (I2C4_base、I2C_MASTER_CMD_BURST_Receive_contt); while (I2CMasterBusy (I2C7 _BASE)); pui8ReadData[2]= I2CMasterDataGet (I2C7 _BASE); if (I2CMasterErr (I2C4_base)!= I2C_MASTER_ERR_NONE) UARTprintf ("I2C 错误\n"); //图6.3的字节5 I2CMasterControl (I2C4_base、I2C_MASTER_CMD_BURST_Receive_contt); while (I2CMasterBusy (I2C7 _BASE)); pui8ReadData[3]= I2CMasterDataGet (I2C7 _BASE); if (I2CMasterErr (I2C4_base)!= I2C_MASTER_ERR_NONE) UARTprintf ("I2C 错误\n"); //图6.3的字节6 I2CMasterControl (I2C4_base、I2C_MASTER_CMD_BURST_Receive_finish); while (I2CMasterBusy (I2C7 _BASE)); pui8ReadData[4]= I2CMasterDataGet (I2C7 _BASE); if (I2CMasterErr (I2C4_base)!= I2C_MASTER_ERR_NONE) UARTprintf ("I2C 错误\n"); readvalue = pui8ReadData[1]<< 4 | pui8ReadData[2]>> 4;//寄存器 D11..d0 return (readvalue); } //********* //// 主要 // //********* int main (void) { uint16_t writeMilli伏特= 0; uint16_t readMilli伏特= 0; FPUEnable(); FPULazyStackingEnable(); G_ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000); InitUART(); UARTprintf ("\033[2J\033[H"); UARTprintf ("CAN 传感器仿真器(CSS)正在启动。\n"); MCP4725Init(); while (1) { UARTprintf ("用%d mV\t 写入 DAC "、writeMilli伏特); readMilli伏特=MCP4725SendReceive( writeMilli伏特); UARTprintf ("从 dac 读取%d mV 值"、readMilli伏特 值); 如果(writeMilli伏特> 4095) { writeMilli伏特= 0; } 其他 { writeMilli伏特+= 128; } ROM_SysCtlDelay (8000000); } 返回1; }

