kinetis之 KV46F150M 的ADC模块使用小结
来源:互联网 发布:国家药品食品数据查询 编辑:程序博客网 时间:2024/06/05 05:39
kinetis之 KV46F150M 的ADC模块使用小结
kinetis系列 ADC 操作大多相同, 不如 MK60 MK10 以及 KV31 等 ,但KV46 的ADC外设的寄存器组织却完全不同于其他 :
- 相关代码如下
初始化代码 :
/***********************************************************************************************
** Function name: adcInit
** Descriptions: Initialization of the PDB and A/D converter for current and voltage sensing
** input parameters: 根据需要自行查阅芯片手册,修改配置相关寄存器.
** output parameters:
** Returned value:
**
** Created by: liGuangdao
** Created Date: 2016/7/13 星期三
**——————————————————————————————————–
** Modified by:
** Modified date:
***********************************************************************************************/
void adcInit(void)
{
/* ### ADC init code */
// enable clock for ADC module
SIM_SCGC5 |= SIM_SCGC5_ADC_MASK;
/* SMODE - triggered parallel, SYNC0 - enabled, interrupt 25MHz */ADC_CTRL1 = ADC_CTRL1_STOP0_MASK | ADC_CTRL1_SMODE(4)|ADC_CTRL1_EOSIE0_MASK|ADC_CTRL1_SYNC0_MASK; ADC_CTRL2 = ADC_CTRL2_STOP1_MASK | ADC_CTRL2_DIV0(0x05)|ADC_CTRL2_EOSIE1_MASK; /* ; */ /* ADC_CTRL2_SIMULT_MASK */ /* * ADC_CLIST1 = 0x3210; * ADC_CLIST2 = 0x7654; * ADC_CLIST3 = 0xBA88; * ADC_CLIST4 = 0xFEDC; * 采集通道 ADCA_CH0 ADCA_CH1 ADCB_CH0 ADCB_CH1; */ ADC_CLIST1 = ADC_CLIST1_SAMPLE0(0) | ADC_CLIST1_SAMPLE1(1) | ADC_CLIST1_SAMPLE2(8) | ADC_CLIST1_SAMPLE3(9); ADC_CLIST3 = ADC_CLIST3_SAMPLE8(9);/* *采样序列中,仅仅打开 0 1 2 8 位置 */ ADC_SDIS = 0xfff8; /* 1111_1111_1111_0000 */
ADC_ZXSTAT = ADC_ZXSTAT_ZCS(0xFFFF); /* Clear zero crossing status flags */
ADC_LOLIMSTAT = ADC_LOLIMSTAT_LLS(0xFFFF); /* Clear low limit status */
ADC_HILIMSTAT = ADC_HILIMSTAT_HLS(0xFFFF); /* Clear high limit status */
ADC_STAT = ADC_STAT_EOSI1_MASK | ADC_STAT_EOSI0_MASK; /* Clear EOSI and EOSI1 flags */
/*
* Interrupt don’t occcur when in converting sample(not complete )
* The relevent bits to select the samples that will generate a scan interupt
* I don’t know why the will a default isr vector3 entance when config the reigster = 0 yizhi
*/
//ADC_SCHLTEN = 0;
ADC_SCTRL = 0; /* No stop waite for Sync slot */
/* power-up delay set to 26 clocks */
ADC_PWR = 0x01A0U;
/* ADCA Speed <=25MHz; ADCB Speed<=25MHz; DIV1 = 6, 25 MHz */
ADC_PWR2 = ADC_PWR2_SPEEDA(3) | ADC_PWR2_SPEEDB(3) | ADC_PWR2_DIV1(5);
SIM_SCGC5 |= SIM_SCGC5_XBARA_MASK; /* Enable clock for XBARA module *//* * FTM0 INIT to ADC0 * XBARA_IN17 (FTM0_INIT) —> XBARA_OUT12(ADCA_TRIG) reference the user manual P.485 */XBARA_SEL6 = XBARA_SEL6_SEL12(17); while(ADC_PWR & (ADC_PWR_PSTS0_MASK|ADC_PWR_PSTS1_MASK)){}; /* wait for ADC to power up */ADC_CTRL1 &= ~ADC_CTRL1_STOP0_MASK;ADC_CTRL2 &= ~ADC_CTRL2_STOP1_MASK;PORTE_PCR16 = PORT_PCR_MUX(0); /* ADCA_CH0 */PORTE_PCR17 = PORT_PCR_MUX(0); /* ADCA_CH1 */PORTE_PCR18 = PORT_PCR_MUX(0); /* ADCB_CH0 */PORTE_PCR19 = PORT_PCR_MUX(0); /* ADCB_CH1 *///ISR_ENABLE_VECT(55);
}
使用上述代码进行初始化KV46的ADC 模块
1, 打开ADC模块的时钟,
2, 配置 ADC_CTRL1 ADC_CTRL2 ,设置 ADC转换的模式,MODE,时钟等
3, CLIST1 CLIST2 确定要转换的slots 设置 掩码寄存器.
4,其他设置详见代码
/*********************************************************************************************************** Function name: kv4xAdcRsltGet ** Descriptions: none** input parameters: 若使用该函数读取单个通道的AD值,最好采用parallel模式,这样ADCA和ADCB是分开的。 ** output parameters: 注意在这种paralle模式下 ADC_CLIST1 ADC_CLIST2(ADCA)、ADC_CLIST3 ADC_CLIST4(ADCB) ** Returned value: 并不是随便设置的,ADC_CLIST1 ADC_CLIST2只能设置(ch0-CH7) ADC_CLIST3 ADC_CLIST4只能 ** 设置(ch8-ch15). ** Created by: liGuangdao** Created Date: 2016/7/13 星期三**--------------------------------------------------------------------------------------------------------** Modified by: ** Modified date: *********************************************************************************************************/uint16_t kv4xAdcRsltGet(ADCX_e adc,uint8_t slo){ if(adc == ADCA) ADC_CTRL1 |= ADC_CTRL1_START0_MASK;/* software start the sample */ else ADC_CTRL2 |= ADC_CTRL2_START1_MASK; while((ADC_RDY & (1<<slo))==0); /* waite the slot is completed */ return ((ADC_RSLT_REG(ADC_BASE_PTR,slo) & ADC_RSLT_RSLT_MASK) >> ADC_RSLT_RSLT_SHIFT); }
1, sequencial 和parallel 模式, 在 sequencial 模式下 ,两个ADC模块 公用一套设置, 就是 CTRL1, 此时设置CTRl2 不起作用
2, 其中在 parallel模式下可以带卡 simultaneous,实现两个通道同时转换
3,在paralle模式下 ADC_CLIST1 ADC_CLIST2(ADCA)、ADC_CLIST3 ADC_CLIST4(ADCB) 并不是随便设置的,ADC_CLIST1 ADC_CLIST2只能设置(ch0-CH7) ADC_CLIST3 ADC_CLIST4只能 设置(ch8-ch15). 而在sequencial模式下没有这个要求
3, 当MODE 我 1 或者 2 时 若使能触发(同步 sync),则只会触发一次,
- kinetis之 KV46F150M 的ADC模块使用小结
- Kinetis KL8x 使用eDMA模块接收串口数据
- TMS320F28335 ADC模块的学习
- 电路设计_STM8S003F3P6 AWU&ADC使用小结
- ADC 模块
- kinetis时钟模块MCG详解
- kinetis时钟模块MCG详解
- kinetis时钟模块MCG详解
- kinetis时钟模块MCG详解
- kinetis时钟模块MCG详解
- Kinetis MCU GPIO 使用
- STM32F4 ADC模块使用不同DMA模式的区别和对比
- 飞思卡尔kinetis L系列芯片之最简单模块watchdog
- kinetis的SPI例程
- kinetis的nfc调试
- 使用Beaglebone Black的ADC
- 使用Beaglebone Black的ADC
- 飞思卡尔Kinetis芯片中NVIC模块的中断寄存器的介绍及其应用举例
- java入门第一季_1.7_对象
- Java与mysql数据库相连接
- Android Studio多渠道打包和代码混淆教程 【亲测可用】
- 有关json数据
- Exchanger
- kinetis之 KV46F150M 的ADC模块使用小结
- Java循环语句之 while · doWhile · for · 多重循环
- Leetcode题解 141. Linked List Cycle
- JDBC
- TreeView(竖节点控件)《笔记4》
- C语言指针的函数运用和数组
- POJ1276 Cash Machine 【解法一】
- ajax、xml、json
- android studio NDK 配置及入门案例