-
LKS32MC08x系列时钟主频、机器周期、总线周期、指令周期计算 sos
1.在pll开启且不分频的条件下,用一个io口翻转电平的方式,在主循环内测试了一下输出频率,主循环内就一句代码:“GPIO0->PDO = ~GPIO0->PDO;”。得到的输出频率大概是2mhz,和预期值相差较大,所以询问一下如题。 2。以pwm方式触发ADC中断,在ADC中断中加入翻转gpio的测试。但是降低/提高pwm的频率对ADC中断中的电平翻转频率似乎没有影响?部分代码如下: void ADC0_init(void) { ADC_InitTypeDef ADC_InitStructure; ADC_StructInit(&ADC_InitStructure); //初始化结构体 ADC_InitStructure.IE = ADC_EOS0_IRQ_EN | ADC_DAT0_OV_IRQ_EN; //第一段扫描结束中断使能和ADC_DAT0超阈值中断 ADC_InitStructure.Align = ADC_LEFT_ALIGN; //ADC数据输出左对齐 ADC_InitStructure.UTIMER_Trigger_En = DISABLE; //UTIMER_T0硬件触发ADC采样 ADC_InitStructure.MCPWM_Trigger_En = ADC_MCPWM_T0_TRG; ADC_InitStructure.FirSeg_Ch = ADC_2_TIMES_SAMPLE; //第一段采样的总通道数: 1~20 ADC_InitStructure.Trigger_Cnt = 0; /*单段触发模式下触发一次采样所需要的事件数:0~15 0表示需要一次触发,15表示需要16次*///修改此处似乎进入中断的频率并没有更改? ADC_InitStructure.Trigger_Mode = ADC_1SEG_TRG; /*ADC采样1段模式*/ ADC_InitStructure.DAT0_TH_Type = ENABLE; //设置ADC比较上阈值中断使能 ADC0_DAT0_TH = 5000; //设置ADC0_DARA0大于ADC0_DAT0_TH值时,触发ADC数值比较中断 ADC_Init(ADC0, &ADC_InitStructure); ADC0_IF = 0xff; //清中断标志位 ADC0_GAIN0 = 0x0; //开启2/3增益 ADC0_CHN0 = ADC_CHANNEL_7 | (ADC_CHANNEL_16 << 8); //采样通道通道 } void MCPWM_init(void) { MCPWM_InitTypeDef MCPWM_InitStructure; MCPWM_StructInit(&MCPWM_InitStructure); MCPWM_InitStructure.CLK_DIV = PWM_PRSC; /* MCPWM时钟分频设置 */ MCPWM_InitStructure.MCLK_EN = ENABLE; /* 模块时钟开启 */ MCPWM_InitStructure.MCPWM_Cnt_EN = ENABLE; /* 主计数器开始计数使能开关 */ MCPWM_InitStructure.MCPWM_WorkModeCH0 = CENTRAL_PWM_MODE; /* MCPWM CH0工作模式:边沿对齐PWM模式 */ MCPWM_InitStructure.GPIO_BKIN_Filter = 0; /* 急停事件(来自IO口信号)数字滤波器时间设置 */ MCPWM_InitStructure.CMP_BKIN_Filter = 0; /* 急停事件(来自比较器信号)数字滤波器时间设置 */ MCPWM_InitStructure.MCPWM_PERIOD = PWM_PERIOD; /* 计数周期设置即MCPWM输出周期*/ MCPWM_InitStructure.TriggerPoint0 = (u16)(-PWM_PERIOD); /* MCPWM_TMR0 ADC触发事件T0 设置 */ 。。。 } void ADC0_IRQHandler(void) { if (ADC0_IF & BIT0) //判断是否发生第一采样完成中断 { ADC0_IF = BIT0; //清除第一段采样完成中断标志位 } if (ADC0_IF & BIT6) { ADC0_IF = BIT6; //清除ADC0_DAT0超阈值中断 } GPIO0->PDO = ~GPIO0->PDO; }
1633浏览量 0回复量 关注量