在线时间3 小时
UID3312640
注册时间2016-9-17
NXP金币0
该用户从未签到
新手上路

- 积分
- 31
- 最后登录
- 2016-9-26
|
经过好几天的调试,根据datasheet设置了所有寄存器,还是不能得到正常的结果,不知道是怎么回事?还请大神指点,焦头烂额中。。。
ADC设置为软件触发方式,外接一个三轴加速度传感器,实现一个小DEMO,读出加速度传感器输出值,然后用显示到板子上的LCD。
我使用了PTE20 (ADC0_SE0),PTE16 (ADC0_SE1),PTE18 (ADC0_SE2),分别对应X Y Z轴
/*ADC 程序*/
void adc_init(void)
{
SIM_SCGC5 |= SIM_SCGC5_PORTE_MASK;
PORTE->PCR[20] = PORT_PCR_MUX(0);
SIM_SCGC6 |= SIM_SCGC6_ADC0_MASK;
// Initialize ADC0
Master_Adc_Config.CONFIG1 = ADLPC_NORMAL | ADC_CFG1_ADIV(ADIV_1) | ADLSMP_LONG | ADC_CFG1_MODE(MODE_10)
| ADC_CFG1_ADICLK(ADICLK_BUS);
Master_Adc_Config.CONFIG2 = MUXSEL_ADCA | ADACKEN_DISABLED | ADHSC_NORMAL | ADC_CFG2_ADLSTS(ADLSTS_20) ;
//Master_Adc_Config.COMPARE1 = 0x1234u ;
//Master_Adc_Config.COMPARE2 = 0x5678u ;
Master_Adc_Config.STATUS2 = ADTRG_SW | ACFE_DISABLED | ACFGT_LESS | ACREN_DISABLED | DMAEN_DISABLED | ADC_SC2_REFSEL(REFSEL_EXT);
Master_Adc_Config.STATUS3 = CAL_OFF | ADCO_SINGLE | AVGE_DISABLED | ADC_SC3_AVGS(AVGS_4);
// Master_Adc_Config.PGA = PGAEN_DISABLED | PGACHP_NOCHOP | PGALP_NORMAL | ADC_PGA_PGAG(PGAG_64);
Master_Adc_Config.STATUS1A = AIEN_OFF | DIFF_SINGLE | ADC_SC1_ADCH(31);
ADC_Config_Alt(ADC0_BASE_PTR, &Master_Adc_Config); // config ADC
}
uint16_t adc_read(uint8_t channel)
{
ADC0_SC1A = AIEN_OFF | DIFF_SINGLE | ADC_SC1_ADCH(channel) ; // start conversion
while((ADC0_SC1A & ADC_SC1_COCO_MASK)!= 0){};
return ADC0_RA;
}
/*main*/
int main(void)
{
//unsigned char uartStr[10];
unsigned int strNumX, strNumY, strNumZ = 0;
unsigned char uLCDMsg[5] = "";
/*初始化为1,以区别ADC实际输出*/
uint16_t X_value = 1;
uint16_t Y_value = 1;
uint16_t Z_value = 1;
//__disable_irq();
//uart_init (UART1, SYSCLK, BAUDRATE);
SLCD_Init();
adc_init();
//__enable_irq();
X_value = adc_read(0);
Y_value = adc_read(1);
Z_value = adc_read(2);
snprintf(uLCDMsg, 5, "%4d", X_value);
SLCD_WriteMsg(uLCDMsg);
}
运行后LCD就一直显示输出0,实在不知道是什么原因,很简单的demo,也完全是按照datasheet的理解设置的,还望高手指正!!
最佳答案
直接用SDK里面的例程跑一下,不会有问题的,首先你得保证你得代码没有问题
|
|