2、RH850外设时钟选择及配置

前言

 

上一篇文章完成了RH850时钟源寄存器配置,外设要正常工作,必须要配置对应的时钟,这篇文章说明RH850外设时钟配置。

 

  • 时钟选择寄存器

   下面表格是RH850-F1K技术规格书列出的外设时钟寄存器。

ba8422bad7d445f6b7fd5fa17bf05777.png

 

   外设时钟寄存器基本都相同,如TAUJ代表的是定时器J的时钟,ADCA代表是A/D转换时钟。下面以RH850-F1K 定时器TAUJ为例,介绍外设时钟相关寄存器。

 

1.1 TAUJ时钟源选择寄存器  C_AWO_TAUJ Source Clock Selection Register

5cbaaa008c0049f28049064b125a6f20.png

 

CKSC_ATAUJS_CTL定时器TAUJ时钟源选择寄存器可以32bit读写。地址:FFF8 2100H,复位值0000 0001H。

Bit position

Bit Name

Function

31 - 3

保留

 

2 - 0

ATAUJSCSID[2:0]

000: 禁止配置

001: 内部高速振荡器

010: 外部主晶振

011: 内部低速晶振

100: PPLLCLK2

其他禁止配置

 

这个寄存器选择定时器时钟的来源,比较简单,按需要选择。

 

1.2 TAUJ时钟源激活状态寄存器  C_AWO_TAUJ Source Clock Active Register

745d976656b24afe81f66e776df79d2c.png

 

CKSC_ATAUJS_ACT定时器TAUJ时钟源激活状态寄存器可以32bit读。地址:FFF8 2108H,复位值0000 0001H。

Bit position

Bit Name

Function

31 - 3

保留

 

2 - 0

ATAUJSACT [2:0]

000: 禁止配置

001: 内部高速振荡器

010: 外部主晶振

011: 内部低速晶振

100: PPLLCLK2

其他禁止配置

 

时钟源选择寄存器配置后,需要读这个寄存器,直到这个寄存器值和时钟源选择寄存器值一致,说明时钟源选择寄存器配置成功。

 

1.3 TAUJ时钟分频寄存器 C_AWO_TAUJ Clock Divider Selection Register

62db06821b484889953b01b8a4e77ec9.png

CKSC_ATAUJD_CTL定时器TAUJ时钟分频寄存器可以32bit读写。地址:FFF8 2200H,复位值0000 0001H。

Bit position

Bit Name

Function

31 - 3

保留

 

2 - 0

ATAUJDCSID [2:0]

000: 禁止配置

001: 选择时钟/1

010: 选择时钟/2

011: 选择时钟/4

100: 选择时钟/8

其他禁止配置

 

1.4 TAUJ时钟分频激活状态寄存器C_AWO_TAUJ Clock Divider Active Register

c31d870430834596a0dff7690c7c2ff8.png

 

CKSC_ATAUJD_ACT定时器TAUJ时钟分频激活状态寄存器可以32bit读。地址:FFF8 2208H,复位值0000 0001H。

Bit position

Bit Name

Function

31 - 3

保留

 

2 - 0

ATAUJDACT [2:0]

000: 禁止配置

001: 选择时钟/1

010: 选择时钟/2

011: 选择时钟/4

100: 选择时钟/8

其他禁止配置

 

时钟分频寄存器配置后,需要读这个寄存器,直到这个寄存器值和时钟时钟分频寄存器值一致,说明时钟分频寄存器配置成功。

 

1.5 TAUJ时钟待机模式停止寄存器C_AWO_TAUJ Stop Mask Register

8534dff0e6ed493d83ca366856609295.png

 

CKSC_ATAUJD_STPM定时器TAUJ待机模式停止寄存器可以32bit读写。地址:FFF8 2218H,复位值0000 0002H。

Bit position

Bit Name

Function

31 - 1

保留

 

0

ATAUJD

STPMSK

0: 待机模式停止

1: 待机模式不停止

 

其他外设寄存器和TAUJ基本相同,这里就不介绍了。

 

二、RH850-F1K时钟源及外设时钟配置例程

 

void Init_Clocks(void)

{

/*配置主晶振 16M*/

if((CLKCTLMOSCS&0x04u) != 0x4u)  /* 检测MainOsc 有没有启动 */

       {

CLKCTLMOSCC=0x06;  /* 10B,(8MHz < MOSC frequency =< 16MHz) */

            CLKCTLMOSCST=0x8000;  /* 设置稳定延时时间(8,19 ms) */

protected_write(WPROTRPROTCMD0,WPROTRPROTS0,CLKCTLMOSCE,0x01u);  /* MOSCE=0x01,使能主晶振*/

while (((CLKCTLMOSCS&0x04u) != 0x04u) != 0x04u); /* 等待MainOSC正常工作 */

}

/*配置PLL 80M*/

if((CLKCTLPLLS&0x04u) != 0x04u)  /* 检测PLL有没有启动 */

{

CLKCTLPLLC=0x00010B3B;  /* 配置PLL控制寄存器,主晶振 16M,CPLLOUT,PPLLOUT输出80M,数据来源见前面分析*/

protected_write(WPROTRPROTCMD1,WPROTRPROTS1,CLKCTLPLLE,0x01u);  /*使能 PLL */

while((CLKCTLPLLS&0x04u) != 0x04u){}   /*等待 PLL正常工作 */

}

/*配置CPU时钟80M*/

protected_write(WPROTRPROTCMD1,WPROTRPROTS1,CLKCTLCKSC_CPUCLKD_CTL,0x01u); /*CPU时钟480/6=80M */

  while(CLKCTLCKSC_CPUCLKD_ACT!=0x01u);

protected_write(WPROTRPROTCMD1,WPROTRPROTS1,CLKCTLCKSC_CPUCLKS_CTL,0x03u); /*CPU时钟源选择,BIT1-0, 3-PLL输出CPLLCLK*/

while(CLKCTLCKSC_CPUCLKS_ACT!=0x03u); /*等待 CPU时钟正常工作 */

/* 设置PERI2总线 40 MHZ (PPLLCLK2) */

protected_write(WPROTRPROTCMD1,WPROTRPROTS1,CLKCTLCKSC_IPERI2S_CTL,0x02u);

while(CLKCTLCKSC_IPERI2S_ACT!=0x02u);

/*设置ADCA0时钟 40 MHZ (PPLLCLK2)  */

protected_write(WPROTRPROTCMD0,WPROTRPROTS0,CLKCTLCKSC_AADCAS_CTL,0x03u);

while(CLKCTLCKSC_AADCAS_ACT!=0x03u);

/*设置ADCA1时钟 40 MHZ (PPLLCLK2)  */

protected_write(WPROTRPROTCMD1,WPROTRPROTS1,CLKCTLCKSC_IADCAS_CTL,0x03u);

while(CLKCTLCKSC_IADCAS_ACT!=0x03u);

/*设置RLIN时钟 40 MHZ (PPLLCLK2)  */

protected_write(WPROTRPROTCMD1,WPROTRPROTS1,CLKCTLCKSC_ILINS_CTL,0x03u);

while(CLKCTLCKSC_ILINS_ACT!=0x03u);

/*设置CAN时钟80 MHZ (CPUCLK)  */

protected_write(WPROTRPROTCMD1,WPROTRPROTS1,CLKCTLCKSC_ICANS_CTL,0x03u);

while(CLKCTLCKSC_ICANS_ACT !=0x03u);

/*设置CAN通讯时钟16 MHZ (main osc)  */

protected_write(WPROTRPROTCMD1,WPROTRPROTS1, CLKCTLCKSC_ICANOSCD_CTL,0x01u);

while(CLKCTLCKSC_ICANOSCD_CTL !=0x01u);

 

/* Select the Low Speed IntOsc(240kHz) as TAUJ Clock */  

/*设置TAUJ时钟40 MHZ (PPLLCLK2)  */

protected_write(WPROTRPROTCMD0,WPROTRPROTS0,CLKCTLCKSC_ATAUJS_CTL,0x04u);  //??

while(CLKCTLCKSC_ATAUJS_CTL!=0x04u);

}

 

RH850时钟相关说明完成了,时钟是单片机系统最基本部分,时钟初始化完成后,系统就可以跑起来了。

 

 

 

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vx cr_8118

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值