ADSP-BF706简介 && 时钟配置
针对需要注意的点,尽我知道的概括。
1、最大内核时钟400M,最大系统时钟200M,Core0最大运行时钟100M
2、其中外设EPPI最大采集数据时钟频率,50M。
3、若使用定时器产生PWM波,只有宽度和延时,无周期概念。
4、可进行同步触发操作。
5、外部flash可编程【进行编程时,flash相关文档很重要】。
…
一、先进行时钟配置,分别是内部时钟配置和外部PLL时钟配置,至于稳定性,可以用信号发生器产生一个标准正弦信号,再采集这个信号,分别使用内部时钟和外部时钟,对比实验可得其效果。
1、内部时钟配置:
这个可以直接用CCES里面example中的时钟配置:
#define DEV_NUM (0)
#define MHZTOHZ (1000000)
#define CLKIN (25 * MHZTOHZ)
#define CORE_MAX (400 * MHZTOHZ)
#define SYSCLK_MAX (200 * MHZTOHZ)
uint32_t fcclk = 0u,fsysclk = 0, fsclk0 = 0, fsclk1 = 0, outclk=0;
void InitSystemClock(void)
{
uint32_t result = 0;
adi_pwr_Init(DEV_NUM,CLKIN); //初始化外部输入频率
adi_pwr_InstallCallback(DEV_NUM, PWRCallback); //设置回调函数,在频率或者模式改变之前和之后都会调用此回调函数,比如在进入内核休眠时的时钟频率的改变。
adi_pwr_SetFreq(DEV_NUM, CORE_MAX, SYSCLK_MAX); //设置核心频率和系统频率 如果要设置频率只需要在这里修改频率即可
result = adi_pwr_GetCoreFreq(DEV_NUM, &fcclk);
result = adi_pwr_GetSystemFreq(DEV_NUM, &fsysclk, &fsclk0, &fsclk1);
}
如此便设置了内部时钟,可以通过adi_pwr_GetSystemFreq()函数得到fsysclk=200M,fsclk0=100M。
2、外部时钟设置:
根据文档,需要配置OUTCLK作为外部时钟的输入,通过PLL时钟被倍频器得到想要的时钟输出:
/*************************pll时钟***************************************
* pll时钟引脚初始化:
* Output Frequency (MHz):50
* Input Frequency (MHz):10
* S1, S0:0,1;
*
*******************************************************************************/
#if 1
adi_gpio_SetDirection(
ADI_GPIO_PORT_C,
ADI_GPIO_PIN_8|ADI_GPIO_PIN_9,
ADI_GPIO_DIRECTION_OUTPUT);
adi_gpio_Set(ADI_GPIO_PORT_C, ADI_GPIO_PIN_9);
adi_gpio_Clear(ADI_GPIO_PORT_C, ADI_GPIO_PIN_8);
adi_pwr_SetClkOutSelectRegister(DEV_NUM, ADI_PWR_CLKOUT_OUTCLK_PLLCLKF); //OUTCLK
adi_pwr_SetClkDivideRegister(DEV_NUM,ADI_PWR_CLK_DIV_OSEL,80); //OUTCLK= PLLMAX / div PLLMAX=800
adi_pwr_GetOutClkFreq(DEV_NUM,&outclk);
#endif
基本步骤就是,配置引脚基本输出功能,设置倍频器中S0S1的倍频参数,上述我设置的 S1, S0:0,1,表示*5,也就是如果想要输出50M,那就需要设置输入频率50/5=10M。adi_pwr_SetClkDivideRegister(DEV_NUM,ADI_PWR_CLK_DIV_OSEL,80):
这个函数的意思是,我要配置10M,那第二参数分频,就是800/10=80;800是PLL最大的值,它等于: PLLCLK frequency = (SYS_CLKIN frequency / (DF+1)) * MSEL;其实这个800M是定义的, 而设置内部时钟时用的MSEL等分频/倍频参数都是通过已知算出来的。在706用户手册上写有:
相应的,在S1, S0: 0,1基础上,如果想设置频率为80M,则参数应该设置为800/(80/5)=50。