龙芯1c库是把龙芯1c的常用外设的常用功能封装为一个库,类似于STM32库。Git地址:https://gitee.com/caogos/OpenLoongsonLib1c
本文通过“龙芯1c库”中提供的时钟相关接口,获取了PLL,CPU,DDR和APB的时钟,并将其打印出来,然后再详细讲解是如何封装这几个接口的。
龙芯1c库中时钟接口使用示例
时钟接口简介
提供几个clk_get_xxx_rate()的接口,用于获取相应的频率。比如
pll的接口为clk_get_pll_rate(),
cpu的是clk_get_cpu_rate()。
apb的是clk_get_apb_rate()。
测试思路
在main()函数中获取pll,cpu,ddr,apb的频率,并打印出来。
代码清单
#include "../lib/gpio.h"
#include "../lib/clock.h"
#include "../lib/pwm_timer.h"
#include "../lib/ls1c_regs.h"
#include "led.h"
typedef long long off_t;
struct callvectors {
int (*open) (char *, int, int);
int (*close) (int);
int (*read) (int, void *, int);
int (*write) (int, void *, int);
off_t (*lseek) (int, off_t, int);
int (*printf) (const char *, ...);
void (*cacheflush) (void);
char *(*gets) (char *);
};
struct callvectors *callvec;
#define myprintf (*callvec->printf)
#define mygets (*callvec->gets)
int main(int argc, char **argv, char **env, struct callvectors *cv)
{
callvec = cv;
unsigned long pll_rate, cpu_rate, ddr_rate, apb_rate, dc_rate;
unsigned int ctrl;
volatile unsigned int *clk_div_param = (volatile unsigned int *)LS1C_CLK_DIV_PARAM;
ctrl = *clk_div_param;
myprintf("[%s] ctrl=0x%x\n", __FUNCTION__, ctrl);
pll_rate = clk_get_pll_rate();
cpu_rate = clk_get_cpu_rate();
ddr_rate = clk_get_ddr_rate();
apb_rate = clk_get_apb_rate();
dc_rate = clk_get_dc_rate();
myprintf("[%s] pll_rate=%luHz, cpu_rate=%luHz, ddr_rate=%luHz, apb_rate=%luHz, dc_rate=%luHz\n",
__FUNCTION__, pll_rate, cpu_rate, ddr_rate, apb_rate, dc_rate);
// test_pwm();
return(0);
}