📄 sample4.c
字号:
/****************************************************************/
/* 项目名称 : R8C/23 CAN/LIN Demo Board */
/* : 样例程序4 */
/* : LIN从机 */
/* 硬件环境 : R0K521237C000BB */
/* MCU型号 : R5F21237JFP */
/* C编译器 : NC30WA,版本5.30.r02及以上 */
/* 文件名 : Sample4.c */
/* 版本 : 1.0 */
/* 作者 : wangsy */
/* 修订历史 : */
/* 修订者 时间 版本 说明 */
/* wangsy 2006/9/11 1.0 初版发行 */
/* */
/****************************************************************/
/* Copyright, 2006 RENESAS TECHNOLOGY CORPORATION & */
/* RENESAS SOLUTIONS CORPORATION */
/****************************************************************/
/*------------------------------------------------------------
包含头文件
------------------------------------------------------------*/
#include "../inc/Comdef_r823.h"
#include "../inc/lin_slave.h"
#include "../inc/Isr.h"
#define OSC_STABLE_TIME 255 // 时钟稳定延时:1指令周期 * 255
/*------------------------------------------------------------
函数声明
------------------------------------------------------------*/
void main(void);
void timerRB_10ms_config(void);
/*------------------------------------------------------------
函数定义
------------------------------------------------------------*/
/*------------------------------------------------------
名称 : main
功能 : 主函数
入口 : 无
出口 : 无
调用 : 无
寄存器 : all
------------------------------------------------------*/
void main(void)
{
uchar8 ucI;
uchar8 temp_event = NO;
asm("FCLR I"); // 关闭总中断
/*--------------------------------------------------*/
/* 时钟初始化 */
/*--------------------------------------------------*/
// 切换主时钟:外接晶体
prc0 = HOFF; // 寄存器写保护:禁用
cm02 = LEN; // 等待模式下时钟 : On
cm05 = LON; // XIN 振荡器输入: On
cm06 = LON; // cm16/17: 使能
cm10 = LON; // 所有时钟: On
cm13 = HON; // Xin-Xout引脚功能:外接晶体
cm14 = HON; // 片内低速时钟:运行
cm15 = HON; // Xin-Xout驱动能力:高
cm16 = 0; // 主时钟分频比:1
cm17 = 0;
ocd0 = HON; // 时钟停止检测功能:开启
ocd1 = HON;
ocd2 = LON; // CPU时钟源:XIN
fra01 = LOFF; // 内部时钟使能位: 关闭
fra00 = LOFF; // 片内高速时钟:禁用
prc0 = LON; // 寄存器写保护:启用
/* 等待时钟稳定 */
ucI = 0;
while ( ucI < OSC_STABLE_TIME )
{
ucI++;
}
timerRB_10ms_config(); // timerRB 初始化
timerRB_10ms_counter = 0; // 10s计数器清零
timerRA_rcv_break_config(); // timerRA接收break信号初始化
asm("FSET I"); // 开启总中断
while(1)
{
lin_sts_convert(temp_event); // 调用LIN状态转换函数
temp_event = NO;
if(lin_cmd != CMD_NO_COMMAND) // 如果没有新的命令则状态转换不执行
{
lin_sts = linM[lin_cmd][lin_sts];
lin_cmd = CMD_NO_COMMAND;
}
else
{
}
}
}
/*------------------------------------------------------
名称 : timerRB_10ms_config
功能 : timerRB 10ms计数初始化
入口 : 无
出口 : 无
调用 : 无
寄存器 : timerRB相关
------------------------------------------------------*/
void timerRB_10ms_config(void)
{
trbic = TIMERRB_INT_PRIORITY; // timerRB中断优先级
tstop_trbcr = HEN; // 强制终止timerRB
while(tcstf_trbcr == HON)
{
}
trbioc = 0; // 定时器模式下,该寄存器为零
tmod1_trbmr = 0; // TMOD1-TMOD0: 00,定时器模式
tmod0_trbmr = 0;
twrc_trbmr = 0; // 同时写 reload 寄存器和counter
tck1_trbmr = 0; // f8
tck0_trbmr = 1;
tckcut_trbmr = 0; // 提供时钟源
//1/10ms = 20M/(8*125*200)
trbpre = 200 - 1;
trbpr = 125 - 1;
tstart_trbcr = HON; // 启动timerRB
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -