时间不多,今天这个模块就简单说以下吧.
HSADC模块简单介绍
kv58有adc模块,也有个人感觉功能更强大的HSADC模块.kv58拥有两个12bit的hsadc模块,最高采集速度可以到5mhz,可以采集140khz~80mhz的信号.有AB通道可以同时采集,也就是说kv58可以做到4通道同时采集.另外还有支持通道乱序扫描可以做到一次触发扫描全部16个通道,相比于adc模块需要不断触发和ping-pong采集来说,hsadc的确做得更加出色.另外,hsadc模块所有通道都支持差分输入,相比于adc只有4个通道(kv58只有两个通道)支持差分输入,配置更加灵活.此外,还有过零中断,超限中断,各种错误中断等等,也可以实现adc的比较功能.
HSADC模块结构简图
可以看出,整个结构相对于adc来说更加简洁.值得注意的是8~17通道的复用情况,需要配置相关寄存器实现复用.
HSADC软件触发中断(查询)示例
主程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
#include <string.h>
#include "board.h" #include "pin_mux.h" #include "clock_config.h"
uint16_t result;
int main(void) { BOARD_InitBootPins(); BOARD_InitBootClocks(); BOARD_InitDebugConsole();
SIM->SCGC5 |= SIM_SCGC5_HSADC0_MASK; NVIC_EnableIRQ(HSADC0_CCA_IRQn); HSADC0->PWR=0; HSADC0->CTRL1&=~HSADC_CTRL1_SMODE_MASK; HSADC0->CTRL1|= HSADC_CTRL1_SMODE(4); HSADC0->CTRL1|= HSADC_CTRL1_DMAENA_MASK; HSADC0->CTRL1|= HSADC_CTRL1_EOSIEA_MASK; HSADC0->CTRL1&=~HSADC_CTRL1_STOPA_MASK; HSADC0->CTRL2|= HSADC_CTRL2_DIVA(2); HSADC0->SDIS = 0xFFFE; HSADC0->CTRL3 |= HSADC_CTRL3_ADCRES(3); HSADC0->CTRL3 |= HSADC_CTRL3_DMASRC_MASK; HSADC0->SCINTEN |= 1; HSADC0->CTRL1 |= HSADC_CTRL1_STARTA_MASK;
for(;;) { } }
void HSADC0_CCA_IRQHandler() { gpio_pin_config_t test; test.outputLogic=0; test.pinDirection=kGPIO_DigitalOutput; GPIO_PinInit(GPIOB,17,&test); result=HSADC0->RSLT[0]; HSADC0->STAT |= HSADC_STAT_EOSIA_MASK ; }
|
管脚分配
1 2 3 4 5 6 7 8
| void BOARD_InitPins(void) { CLOCK_EnableClock(kCLOCK_PortB); CLOCK_EnableClock(kCLOCK_PortE);
PORT_SetPinMux(PORTB, PIN17_IDX, kPORT_MuxAsGpio); PORT_SetPinMux(PORTE, PIN16_IDX, kPORT_PinDisabledOrAnalog); }
|
EOF