自己写寄存器操作的:
代码如下:
#include "MK02F12810.h"
#include "system_MK02F12810.h"
#include "adc.h"
#include "uart.h"
uint32_t flag=0;
uint32_t ADCshuchu=0;
//#define CLOCK_SETUP 1
int main(void)
{
SystemCoreClockUpdate ();
SIM_SCGC6 |=SIM_SCGC6_PIT_MASK //PIT晶振使能
|SIM_SCGC6_ADC0_MASK //ADC晶振使能
|SIM_SCGC6_PDB_MASK; //PDB晶振使能
SIM_SOPT7 |=SIM_SOPT7_ADC0TRGSEL(4);//ADC 用PDB触发
SIM_SCGC4 |=SIM_SCGC4_VREF_MASK;//外部基准电压
SIM_SCGC5 |=SIM_SCGC5_PORTB_MASK;//B口晶振使能
PORTB_PCR(1)|=PORT_PCR_MUX(0); //ADC0_SEL9
ADC0_CFG1 |=ADC_CFG1_ADIV(2)//4分频
|ADC_CFG1_MODE(3);//0x0000004c//16位ADC
ADC0_CFG2 |=0x00000000;//
ADC0_SC1A=0x00;
ADC0_SC1A //|=ADC_SC1_AIEN_MASK //ADC中断使能
|=ADC_SC1_ADCH(9);//ADC引脚
ADC0_SC2 |=ADC_SC2_ADTRG_MASK;//硬件触发
ADC0_SC3 |=ADC_SC3_ADCO_MASK //连续转化
|ADC_SC3_AVGE_MASK
|ADC_SC3_AVGS(3);
PDB0_SC |=PDB_SC_CONT_MASK //PDB连续转换
|PDB_SC_PDBEN_MASK //使能PDB
//|PDB_SC_PDBIE_MASK //允许中断
|PDB_SC_PRESCALER(0X5) //预分频
|PDB_SC_TRGSEL(0Xf) //软件触发
|PDB_SC_MULT(0X2); //分频因子20
PDB0_IDLY =0X0000; //计数器
PDB0_MOD =0X6789; //PDB周期
PDB0_CH0C1 |=PDB_C1_EN(0X01)
|PDB_C1_TOS(0X01)
|PDB_C1_EN(0X02) //
|PDB_C1_TOS(0X02); //
PDB0_CH0DLY0 = 0x1234;
PDB0_CH0DLY1 = 0x4567; //
PDB0_SC = PDB_SC_CONT_MASK // Contintuous, rather than one-shot, mode
| PDB_SC_PDBEN_MASK // PDB enabled
//| PDB_SC_PDBIE_MASK // PDB Interrupt Enable
| PDB_SC_PRESCALER(0x5) // Slow down the period of the PDB for testing
| PDB_SC_TRGSEL(0xf) // Trigger source is Software Trigger to be invoked in this file
| PDB_SC_MULT(2) // Multiplication factor 20 for the prescale divider for the counter clock
| PDB_SC_LDOK_MASK;
PIT_MCR=0x00;
PIT_LDVAL0 =0x0003E2FF;
PIT_TCTRL0 =PIT_TCTRL_TIE_MASK
|PIT_TCTRL_TEN_MASK;
//|PIT_TCTRL_CHN_MASK;
//enable_irq(57);
//IRQn(39);
while(1)
{
if(ADC0_SC1A&0x00000080)
{
ADCshuchu=ADC0_RA;
flag=0;
}
}
}
这样用中断和不用中断都不行,软硬件触发都试过了也不行,仿真看寄存器显示没有进行ADC转化,估计是触发机制没工作。不知道什么原因,希望帮忙解决一下,谢谢!
调试器是pe-micro,开发环境为keil5.11
|