LM3s1138SPI接口的AD例程

2019-03-23 22:19发布

请问哪位有1138的SPI接口AD例程,供小弟学习一下,谢谢! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
13条回答
dyphhl
2019-03-24 18:06
void init(void)                                                                                                                  //        芯片初始化子程序
{
        unsigned long ulBitRate = TheSysClock/10;                                                        //  配置SSI时钟为2MHz
        SysCtlPeripheralEnable( DAC_PERIPH        );                                                          //         使能GPIO外设
    GPIOPinTypeGPIOOutput(DAC_PORT, CS  );                                                            //         设置 GPIO为输出口  
        GPIOPinTypeGPIOInput(DAC_PORT, EOC  );                                                            //         设置 GPIO为输出口  
        GPIOPadConfigSet(DAC_PORT,  CS  , GPIO_STRENGTH_8MA,                                //        配置GPIO驱动电流,弱上拉输出
                                        GPIO_PIN_TYPE_STD_WPU);

        SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI);                                         //  使能SSI模块
    SysCtlPeripheralEnable(SSICLK_PERIPH);                                      //  使能SSI0接口所在的GPIO端口
    SysCtlPeripheralEnable(SSIRX_PERIPH);
    SysCtlPeripheralEnable(SSITX_PERIPH);

    GPIOPinTypeSSI(SSICLK_PORT, SSICLK_PIN);                                              //  将相关GPIO设置为SSI功能
          GPIOPinTypeSSI(SSIRX_PORT, SSIRX_PIN);
    GPIOPinTypeSSI(SSITX_PORT, SSITX_PIN);

    SSIConfig(SSI_BASE, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, ulBitRate, 12);//  SSI配置:基址,协议格式,主模式,位速率,数据宽度
    SSIEnable(SSI_BASE);                                                                   //  使能SSI收发
        CS_H;

}

int wait()                                                                                                                                //        等待传输完毕
{
        if((HWREG(SSI_BASE+SSI_O_SR)&0x00000010)==0x00000010)
        return 1;
        else
        return 0;
}

int ADC2543(unsigned int cmd)                                                //        AD控制子程序,读取上一次AD值,并开始下一次转换
{
        unsigned int result=0;                                                                 //        定义两个整型变量,并将其中一个result初始化
        unsigned long pulData;
        cmd <<=4;                                                                                         //        左移四位,低四位数据进行通道选择
    CS_L;                                                                                                //        片选为低
        SSIDataPut(SSI_BASE,cmd);                                                                                        //        发送通道选择命令
        while(wait());                                                                                                                //        等待传输完毕
        SSIDataGet(SSI_BASE,&pulData);                                                                                //        读取AD转换的数据
        while(wait());                                                                                                                //        等待传输完毕
        while(!GPIOPinRead(DAC_PORT,EOC));                                                    //        等待AD转换完成
        CS_H;
        result=(unsigned int)(pulData);                                                                                //        数据类型转换
        return result&0x0FFF;                                                                                                //        返回数据
}

int main(void)                                                                                               //        主函数main
{
        static float value;                                                                               //        定义一个浮点型变量
        jtagWait();                                                                                                                        //        防止JTAG失效
    clockInit();
        init();                                                                                                       //        调用芯片初始化子程序
        while(1)                                                                                                        //        无限循环
        {
                value = ADC2543(0)*5.0/4095;                                          //        处理从AD读回的数据,得到实际的模拟量
        delay(50000);                                                                         //        设置断点,观察变量value的数值,长延时
        }
}

一周热门 更多>

相关问题

    相关文章