在寫S32 ADC底層發現所有的chn的轉換結果都是集中在RO這個暫存器,有沒有demo是可以實作多通道采集的
uj5u.com熱心網友回復:
多通道采集一般都是一套ADC+暫存器Radc每次轉結束、中斷、中斷程式讀取Radc,轉換到下一個通道、啟動新一個轉換。。。。。。。。。。
uj5u.com熱心網友回復:
因為S32K144 AD轉換結果暫存器Rn是有32個,跟外部chn是對應的上,我想應該是利用起來的uj5u.com熱心網友回復:
那么多個感覺好像沒有什么用
uj5u.com熱心網友回復:
額,搞出來了,需要用到S32K144內部的PDB來做預觸發處理的。uj5u.com熱心網友回復:
LZ可否分享一下多通道的例程?最近被s32k搞得...
uj5u.com熱心網友回復:
void ADC_Init_(void){
PCC->PCCn[PCC_ADC0_INDEX] &=~ PCC_PCCn_CGC_MASK; /* Disable clock to change PCS */
PCC->PCCn[PCC_ADC0_INDEX] |= PCC_PCCn_PCS(3); /* PCS=1: Select SOSCDIV2 */
PCC->PCCn[PCC_ADC0_INDEX] |= PCC_PCCn_CGC_MASK; /* Enable bus clock in ADC */
ADC0->CFG1 |= ADC_CFG1_ADICLK(0) /* Only ALTCLK1 is available */
|ADC_CFG1_ADIV(8) /* the clock rate is (input clock)/4 */
|ADC_CFG1_MODE(2);/* ADICLK=0: Input clk=ALTCLK1=SOSCDIV2 */
/* ADIV=0: Prescaler=1 */
/* MODE=2: 10-bit conversion */
ADC0->CFG2 = ADC_CFG2_SMPLTS(12); /* SMPLTS=12(default): sample time is 13 ADC clks */
ADC0->SC2 = ADC_SC2_ADTRG_MASK /* ADTRG=1: HW trigger */
|ADC_SC2_REFSEL(1); /* ACFE,ACFGT,ACREN=0: Compare func disabled */
/* DMAEN=0: DMA disabled */
/* REFSEL=1: Voltage reference pins= VREFH, VREEFL */
ADC0->SC1[0] = ADC_SC1_ADCH(9) ; /* Select AD9 (ADC0_SE9) @PTC1 */
ADC0->SC1[1] = ADC_SC1_ADCH(10); /* Select AD10 (ADC0_SE10) @PTC2 */
ADC0->SC1[2] = ADC_SC1_ADCH(11) ; /* Select AD11 (ADC0_SE11) @PTC3 */
ADC0->SC1[3] = ADC_SC1_ADCH(12) ; /* Select AD12 (ADC0_SE12) @PTC14 */
ADC0->SC1[4] = ADC_SC1_ADCH(13) ; /* Select AD13 (ADC0_SE11) @PTC15 */
ADC0->SC1[5] = ADC_SC1_ADCH(14) ; /* Select AD14 (ADC0_SE12) @PTC16 */
ADC0->SC3 = 0x00001000; /* CAL=0: Do not start calibration sequence */
/* ADCO=0: One conversion performed */
/* AVGE,AVGS=0: HW average function disabled */
}
void PDB0_Init(void)
{
PCC->PCCn[PCC_PDB0_INDEX] |= PCC_PCCn_CGC_MASK; /* Enable bus clock in PDB0 */
PDB0->SC |= PDB_SC_TRGSEL(0xF) | /* b1111: Software trigger is selected */
PDB_SC_PRESCALER(8) | /* Prescaler: 010 = per.clck/(4*MULT) = 80 / (4*1) = 20MHz */
PDB_SC_PDBIE(1) | /* PDB interrupt enabled */
PDB_SC_MULT(2) | /* 00: Multiplication factor is 1. */
PDB_SC_CONT(1) | /* Continuous mode of operation */
PDB_SC_PDBEN_MASK| /* 1: PDB enabled */
PDB_SC_LDOK_MASK;
PDB0->IDLY = 10000;
PDB0->MOD = PDB_MOD_MOD(14400);
PDB0->CH[0].C1 |= PDB_C1_BB(0xFE) // For Continuos Pre-Trigger Mode
|PDB_C1_TOS(0x0) // Pretrigger Output Select: 0=bypassed , 1=enabled
| PDB_C1_EN(0x3F); // PDB channel's pre-trigger enabled
//Enable_Interrupt(PDB0_IRQn);
INT_SYS_InstallHandler( PDB0_IRQn, &PDB0_Handler , (isr_t*) 0);
INT_SYS_EnableIRQ( PDB0_IRQn);
PDB0->SC |= PDB_SC_SWTRIG_MASK; /* restart PDB counter */
}
這個是在PDB中斷讀取ADC值
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/128066.html
標籤:單片機/工控
