kinetis之 KV46F150M 的ADC模块使用小结

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),则只会触发一次,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录......................................................................... 3 序言......................................................................... 7 1 模数转换器(ADC) ......................................................... 11 1.1 功能............................................................... 12 1.2 自动转换序列发生器的工作原理............................................. 14 1.2.1 顺序采样模式.................................................... 15 1.2.2 同步采样模式.................................................... 15 1.3 不间断自动定序模式.................................................... 20 1.3.1 序列发生器启动/停止模式(具有多个时序触发器的序列发生器启动/停止操作)........ 22 1.3.2 同步采样模式.................................................... 24 1.3.3 输入触发器说明.................................................. 24 1.3.4 定序转换期间的中断操作............................................ 25 1.4 ADC时钟预分频器...................................................... 26 1.4.1 ADC模块时钟和采样频率............................................ 27 1.5 低功率模式.......................................................... 27 1.6 上电顺序............................................................ 28 1.7 序列发生器覆盖功能.................................................... 28 1.8 内部/外部参考电压选择.................................................. 28 1.9 偏移误差校正......................................................... 30 2 ADC寄存器.............................................................. 33 2.1 ADC控制寄存器....................................................... 34 2.2 最大转换信道数寄存器(ADCMAXCONV) ......................................... 37 2.3 自动定序状态寄存器(ADCASEQSR)............................................ 39 2.4 ADC状态和标志寄存器(ADCST).............................................. 39 2.5 ADC参考选择寄存器(ADCREFSEL)............................................ 40 2.6 ADC偏移微调寄存器(ADCOFFTRIM) ........................................... 41 2.7 ADC输入信道选择定序控制寄存器............................................ 41 2.8 ADC转换结果缓冲寄存器(ADCRESULTn) ........................................ 42 A 修订历史记录...........................................................
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值