主题中讨论的其他器件: ADS1248
大家好、
我使用以下代码将 ADC ADS1248与 tms320f280049微控制器连接。 在浏览 ADS1248的数据表时、我发现时钟极性和时钟相位分别应为0和1。 下图是 ADS1248数据表中提供的伪代码的片段。
但是、当我n`t 上述配置时、当我使用 RREG 命令执行寄存器回读操作时、我获得了预期的输出。 当我使用时钟极性和时钟相位值都为零时、我得到了预期的结果。 是否有任何原因出现此类问题、或者我是否意外获得了正确的回读值。 它是否会影响我将来的读数? 在使用 ADC 的同时、是否有任何方法可以使 ADC 完成单次转换、否则、在不影响已设置的配置寄存器值的情况下将其保持关闭或处于非工作模式。
void main (void)
{
//初始化系统控制、GPIO 引脚
uint16_t R1 = 0x0000;
uint16_t R2 = 0x0000;
InitSysCtrl();
InitGpio();
EALLOW;
GpioCtrlRegs.GPAGMUX1.bit.GPIO9=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 3;//将 GPIO 引脚9设置为 SPI 时钟引脚
GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0;//上拉使能
GpioCtrlRegs.GPAQSEL1.bit.GPIO9 = 3;//限定器选择
GpioCtrlRegs.GPAGMUX1.bit.GPIO8=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 3;//将 GPIO 引脚8设置为 SPI SIMO 引脚
GpioCtrlRegs.GPAPUD.bit.GPIO8 = 0;//上拉使能
GpioCtrlRegs.GPAQSEL1.bit.GPIO8 = 3;//限定器选择
GpioCtrlRegs.GPAGMUX1.bit.GPIO10=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 3;//将 GPIO 引脚10设置为 SPI SOMI 引脚
GpioCtrlRegs.GPAPUD.bit.GPIO10 = 0;//上拉使能
GpioCtrlRegs.GPAQSEL1.bit.GPIO10 = 3;//限定器选择
GpioCtrlRegs.GPAGMUX1.bit.GPIO14 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;//将 GPIO 引脚14设置为 GPIO 输出引脚(CS/)
GpioCtrlRegs.GPADIR.bit.GPIO14 = 1;//将方向设置为输出
GpioCtrlRegs.GPAGMUX1.bit.GPIO15 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 0;//将 GPIO 引脚15设置为 GPIO 输出引脚(START)
GpioCtrlRegs.GPADIR.bit.GPIO15 = 1;//将方向设置为输出
GpioCtrlRegs.GPBGMUX1.bit.GPIO34 = 0;
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0;//将 GPIO 引脚34设置为 GPIO 输出引脚(ADC_RST)
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1;//将方向设置为输出(ADC_RST)
GpioCtrlRegs.GPAGMUX1.bit.GPIO6 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0;//将 GPIO 引脚6设置为 GPIO 输入引脚(IRQ_3)
InputXbarRegs.INPUT4SELECT = 0x6;// GPIO6被选为中断1输入
EDIS;
GpioDataRegs.GPASET.bit.GPIO14 = 1;//将 CS/引脚清零为高电平
GpioDataRegs.GPACLEAR.bit.GPIO15 = 1;// ADC_RST 保持低电平
GpioDataRegs.GPBCLEAR.bit.GPIO34 = 1;//起始引脚保持低电平
SpiaRegs.SPICCR.bit.SPISWRESET = 0;//清除软件复位位位
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;//选择主模式
SpiaRegs.SPICTL.bit.CLK_PHASE = 0;//时钟相位选择
SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;//时钟极性
SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = 24;//(25MHz/25 = 1MHz)
SpiaRegs.SPICCR.bit.SPICHAR = 15;//每次传输的字符数
SpiaRegs.SPISTS.bit.INT_FLAG = 0;//清除中断标志
SpiaRegs.SPISTS.bit.overoverrun_FLAG = 0;//清除过运行标志
SpiaRegs.SPIPRI.bit.FREE = 1;
SpiaRegs.SPICCR.bit.SPILBK = 0;//回路启用
SpiaRegs.SPICTL.bit.TALK = 1;//从设备通话被启用
SpiaRegs.SPICTL.bit.SPIINTENA=0;//中断使能
SpiaRegs.SPICCR.bit.SPISWRESET = 1;//软件复位被禁用
GpioDataRegs.GPACLEAR.bit.GPIO14 = 1;//将 CS/引脚清零为低电平
GpioDataRegs.GPBSET.BIO34 = 1;// ADC_RST 被禁用
GpioDataRegs.GPASET.bit.GPIO15 = 1;//通过将 START 引脚设置为高电平来启用器件
SpiaRegs.SPITXBUF = 0xFF06;//发送 RESET 命令并等待0.6ms
DELAY_US (600);
SpiaRegs.SPITXBUF = 0x1640;//发送 SDATAC 命令和 WREG 命令第一个字节
SpiaRegs.SPITXBUF = 0x030A;// WREG 命令第二个字节和 MUX0寄存器值
SpiaRegs.SPITXBUF = 0x0020;// VBIAS 寄存器值和 MUX1寄存器值
SpiaRegs.SPITXBUF = 0x404A;// SYS0寄存器和 WREG 的第一个命令字节
SpiaRegs.SPITXBUF = 0x0105;// WREG 第二个命令字节和 IDAC0寄存器值
SpiaRegs.SPITXBUF = 0x03FF;// IDAC1寄存器值和 ADC 同步命令
SpiaRegs.SPITXBUF = 0x2003;// RREG 第一个字节和 RREG 第二个字节
SpiaRegs.SPITXBUF = 0xFFFF;// RREG 第一个字节和 RREG 第二个字节
SpiaRegs.SPITXBUF = 0xFF02;// NOP 命令
DELAY_US (500);
SpiaRegs.SPITXBUF = 0x0004;// NOP 命令和 SYNC 命令启动新的转换
while (GpioDataRegs.GPADD.bit.GPIO6!= 0)//检查 DRDY 中的低值
{
}
DELAY_US (1);
SpiaRegs.SPITXBUF = 0xFF12;// NOP 和 RDATA
SpiaRegs.SPITXBUF = 0xFFFF;// NOP 命令
R1 = SpiaRegs.SPIRXBUF;//转换的前16位结果 MSB 在前
SpiaRegs.SPITXBUF = 0xFF02;// NOP 和 SLEEP 命令
R2 = SpiaRegs.SPIRXBUF;//转换结果的第二个8位和剩余的8位垃圾值
for (;;)
{
}
}
此致、
葡萄园