【龙芯1c库】封装时钟接口和使用示例

龙芯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);
}

运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值