📄 main.c
字号:
/* main.c: performs a simple ADC conversion of channel 5 using ADC0 */
/* Rev 1.0 Sept 13, 2004 S. Mihalik. */
/* Rev 1.1 Jul 18 2007 SM- Changed ADCCLK prescaler for faster MPC551x default */
/* sysclk, added result in millivolts, used channel 5, conversion in loop */
/* Rev 1.2 Jun 12 2008 SM- Moved initADC0 out of while loop */
/* Copyright Freescale, 2007. All Rights Reserved */
/* Notes: */
/* 1. MMU not initialized; must be done by debug scripts or BAM */
/* 2. SRAM not initialized; must be done by debug scripts or in a crt0 type file */
#include "mpc563m.h" /* Use proper include file such as mpc5510.h or mpc5554.h */
static uint32_t Result = 0; /* ADC conversion result */
static uint32_t ResultInMv = 0; /* ADC conversion result in millivolts */
void initADC0(void) {
EQADC.CFPR[0].R = 0x80801001; /* Send CFIFO 0 a ADC0 configuration command */
/* enable ADC0 & sets prescaler= divide by 2 */
EQADC.CFCR[0].R = 0x0410; /* Trigger CFIFO 0 using Single Scan SW mode */
while (EQADC.FISR[0].B.EOQF !=1) {} /* Wait for End Of Queue flag */
EQADC.FISR[0].B.EOQF = 1; /* Clear End Of Queue flag */
}
void SendConvCmd (void) {
EQADC.CFPR[0].R = 0x80000500; /* Conversion command: convert channel 5 */
/* with ADC0, set EOQ, and send result to RFIFO 0 */
EQADC.CFCR[0].R = 0x0410; /* Trigger CFIFO 0 using Single Scan SW mode */
}
void ReadResult(void) {
while (EQADC.FISR[0].B.RFDF != 1){} /* Wait for RFIFO 0's Drain Flag to set */
Result = EQADC.RFPR[0].R; /* ADC result */
ResultInMv = (uint32_t)((5000*Result)/0x3FFC); /* ADC result in millivolts */
EQADC.FISR[0].B.RFDF = 1; /* Clear RFIFO 0's Drain Flag */
EQADC.FISR[0].B.EOQF = 1; /* Clear CFIFO's End of Queue flag */
}
int main(void) {
int i = 0; /* Dummy idle counter */
initADC0(); /* Enable ADC0 only on eQADC */
while (1) {
SendConvCmd(); /* Send one conversion command */
ReadResult(); /* Read result */
i++; /* Wait forever */
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -