一、实验目的
测量GPIO反转的最高速率及过冲、延迟、抖动等参数
二、代码思路
设置CMU的系统时钟为PLL44M,同时也设置CLKOUT时钟为系统时钟,这样可借用CLKOUT查看是否设置成功,最后再反转PA口
int main()
{
HT_CMU->WPREG = 0xA55A; //向写保护寄存器中写入0xA55A打开写保护功能
HT_GPIOA->HIIPM;
HT_GPIOB->HIIPM;
HT_GPIOC->HIIPM;
HT_GPIOD->HIIPM;
HT_GPIOE->HIIPM; //关闭高阻状态
HT_CMU->WPREG = 0xA55A;
HT_CMU->SYSCLKDIV |= CMU_SYSCLKDIV_SEL40M; //PLL输出预分频设成PLL输出为44M
HT_CMU->SYSCLKDIV |= CMU_CPUCLKDIV_1; // cpu时钟分频设置,给cpu、GPIO、DMA、CRC提供时钟
HT_CMU->PREFETCH |= 0x10000;
HT_CMU->CLKCTRL0 |= CMU_CLKCTRL0_PLLEN; //使能锁相环时钟PLL
Delay_ms(3000);
HT_CMU->SYSCLKCFG |= 0x83;
Delay_ms(3000);
HT_CMU->WPREG = 0xA55A;
HT_CMU->CLKOUTSEL = CMU_CLKOUTSEL_SYS; //clkout选择系统时钟
HT_CMU->CLKOUTDIV &= 0x00; //分频,默认2分频
HT_CMU->CLKCTRL0 |= 0x1000; // 使能clkout
HT_GPIOE->IOCFG |= 0x00000000; //PE3复用成clkout输出
HT_GPIOE->AFCFG &= ~0x08;
HT_GPIOE->AFCFG1 &= 0x08;
HT_GPIOA->IOCFG = 0x00000000; //PA配置成推完输出
HT_GPIOA->PTDIR = 0xFFFFFFFF;
HT_GPIOA->PTOD = 0xFFFFFFFF;
while(1)
{
for(i = 0; i < 16; i ++)
{
ioread = HT_GPIOA->PTDAT;
ioset = ioread | (1 << a);
ioreset = ioread & ~ (1 << a);
HT_GPIOA->PTDAT = ioset;
HT_GPIOA->PTDAT = ioreset;
}
}
}
三、实验结果
clkout默认是2分频,因此clkout输出为22MHZ
测试出GPIOA输出最高频率为3.68MHz
延迟参数包括上翻时间和下翻时间:
上翻时间:0.1VCC~0.9VCC经过的时间
下翻时间:0.9VCC~0.1VCC经过的时间
负向过冲电压:最大过冲和3.3V比较
正向过冲电压:最大过冲和0V比较
最大的凹陷,可结合最大过冲计算出电源抖动的MAX: