📄 main.c
字号:
#include "systemInit.h"
#include "uartGetPut.h"
#include <stdio.h>
#include <ssi.h>
#define PART_LM3S1138
#include <pin_map.h>
#define ADCSequEnable ADCSequenceEnable
#define ADCSequDisable ADCSequenceDisable
#define ADCSequConfig ADCSequenceConfigure
#define ADCSequStepConfig ADCSequenceStepConfigure
#define ADCSequDataGet ADCSequenceDataGet
//tBoolean ADC_EndFlag = false; // 定义ADC转换结束的标志
// SSI初始化
void ssiInit(void)
{
unsigned long ulBitRate = TheSysClock / 3;
SysCtlPeriEnable(SYSCTL_PERIPH_SSI0); // 使能SSI模块
SysCtlPeriEnable(SSI0CLK_PERIPH); // 使能SSI0接口所在的GPIO端口
SysCtlPeriEnable(SSI0FSS_PERIPH);
SysCtlPeriEnable(SSI0RX_PERIPH);
SysCtlPeriEnable(SSI0TX_PERIPH);
GPIOPinTypeSSI(SSI0CLK_PORT, SSI0CLK_PIN); // 将相关GPIO设置为SSI功能
GPIOPinTypeSSI(SSI0FSS_PORT, SSI0FSS_PIN);
GPIOPinTypeSSI(SSI0RX_PORT, SSI0RX_PIN);
GPIOPinTypeSSI(SSI0TX_PORT, SSI0TX_PIN);
// SSI配置:基址,协议格式,主/从模式,位速率,数据宽度
SSIConfig(SSI0_BASE, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, ulBitRate, 16);
SSIEnable(SSI0_BASE); // 使能SSI收发
}
// 将控制字输出
void dataDisplay(unsigned char ucData)
{
const unsigned char ucTable[8] = // 定义8个通道的控制字
{
0x0c, 0x1c, 0x2c, 0x3c, 0x4c, 0x5c, 0x6c, 0x7c
};
unsigned char t = ucTable[ucData]; //
SSIDataPut(SSI0_BASE,t); // 通过SSI输出数据到tlc2543
}
// ADC初始化
/*****************************************************************
void adcInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_ADC); // 使能ADC模块
SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); // 设置ADC采样速率
ADCSequDisable(ADC_BASE, 0); // 配置前先禁止采样序列
// 采样序列配置:ADC基址,采样序列编号,触发事件,采样优先级
ADCSequConfig(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);
// 采样步进设置:ADC基址,采样序列编号,步值,通道设置
ADCSequStepConfig(ADC_BASE, 0, 0, ADC_CTL_CH0 |
ADC_CTL_END |
ADC_CTL_IE);
ADCIntEnable(ADC_BASE, 0); // 使能ADC中断
IntEnable(INT_ADC0); // 使能ADC采样序列中断
IntMasterEnable(); // 使能处理器中断
ADCSequEnable(ADC_BASE, 0); // 使能采样序列
}
******************************************/
// ADC采样
/************************************
unsigned long adcSample(void)
{
unsigned long ulValue;
ADCProcessorTrigger(ADC_BASE, 0); // 处理器触发采样序列
while (!ADC_EndFlag); // 等待采样结束
ADC_EndFlag = false; // 清除ADC采样结束标志
ADCSequDataGet(ADC_BASE, 0, &ulValue); // 读取ADC转换结果
return(ulValue);
}
*********************************************************/
// 主函数(程序入口)
int main(void)
{
unsigned long ulVal;
char cBuf[30];
jtagWait(); // 防止JTAG失效,重要!
clockInit(); // 时钟初始化:PLL,20MHz
ssiInit(); // SSI初始化
uartInit(); // UART初始化
// adcInit(); // ADC初始化
for (;;)
{
int i;
// ulVal = adcSample(); // ADC采样
// ulVal = (ulVal * 3000) / 0xffff; // 转换成电压值
for(i=0;i<8;i++)
{
dataDisplay(i); //输出控制字
SSIDataGet(SSI_BASE, &ulVal);
ulVal = (ulVal * 5000) / 65535;
sprintf(cBuf, "ADC0 = %ld(mV)\r\n", ulVal); // 输出格式化
uartPuts(cBuf); // 通过UART显示结果
SysCtlDelay(1500 * (TheSysClock / 3000)); // 延时约1500ms
}
}
}
/********************
// ADC采样序列0的中断
void ADC_Sequence_0_ISR(void)
{
unsigned long ulStatus;
ulStatus = ADCIntStatus(ADC_BASE, 0, true); // 读取中断状态
ADCIntClear(ADC_BASE, 0); // 清除中断状态,重要
if (ulStatus != 0) // 如果中断状态有效
{
ADC_EndFlag = true; // 置位ADC采样结束标志
}
}
**************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -