这是一篇关于Renesas的CS+ for ca(以下简称CA)的入门简介,在网上关于这个IDE的使用方法比较少人讲述,兴许使用的人比较少吧。另一个类似的IDE是CS+ for cc,这两个IDE的区别在于CA终将淘汰,现在CA的版本为4.0,而CC的版本为5.0。
从供应商的技术支持得到的反馈是CA是早期的NEC开发的,而NEC的IP做得是不错的,而瑞萨的外设做得不错,然后集两家之所长,瑞萨做了关于RL78系列的单片机。但是CA的编译器编译效率不太好,然后瑞萨后来直接开发新的编译器,用于取代CA的编译器,就是后面的CC。
我之所以任然选择CA主要是CA的支持度更高,资源更丰富,官网的demo都是基于CA的,但是我建议大家后面使用CC这个IDE吧,CC的使用方法基本和CA一样,而且编译出来的二进制文件比CA编译出来的小20%,且CC能支持long long类型的量,而CA只支持long型变量。
先简单的讲讲怎么建立工程,安装过程略过,以R5F100MF这个芯片为例
1、单击菜单栏的Project->Creat New Project
选择RL78系列的芯片,编译器选择CA78K0R,注意一件事,路径不要出现中文。
建立工程之后的工作区如下图:
CA和CC均提供代码生成工具,单击Tool->Plug-in Setting,出现如下框图,勾选代码生成插件
IDE重启一次,然后在工程文件处会出现代码生成的选项,如图
然后简单介绍一下代码生成工具的使用:
点击Project Tree栏下代码生成工具的Clock Generatot
首先需要选择引脚的映射功能,有些引脚可以映射不同的外设功能,需要查询datasheet后再选择。但同一时间只能使用一个引脚,每一个PIOR对应一套引脚,根据原理图自己选择对应的引脚,有一点需要注意的是,一旦选择了好了以后,无法修改,只能新建工程。
然后是Clock Setting标签栏,这里主要是电源的运行范围,运行主时钟的选择,我选择了内部时钟,32MHz,并且勾选了,fSUB,这个是用于运行内部RTC的时钟源。
Block diagram主要是用于查看内部时钟连接的,用于查找各个外设开启需要开启什么时钟
On-chip debug setting 勾选On-chip debug operantion。setting used Security ID setting一般不选,否则在别的工程无法正常编译芯片。
Data flash 这个标签有需要就使能吧。
然后点击Code Generator下的Port,这是设置引脚初始化的时候的电平以及使用方式的,具体的引脚设置需要查看原理图,在这里我建议GPIO最后再设置。
然后点击Interrupt,勾选其中一个外部中断,可以选择有效边沿或者叫触发电平,优先级有四级可选,高-一级-二级-低
然后点击Key input interrupt 。这个和外部中断触发的区别在于有消抖
然后点击Project Tree栏的Serial
根据需要选择通道,不同的通道对应不同的引脚端口,这一点在一开始就定好了的。串口功能可以选择单一的接收、单一的发送、接收发送同时选择。
点击UART0
图中我选择了8个数据长度、小端数据、无校验、1个停止位、9600波特率(波特率可以直接手动输入)、优先级为1级、不使用回调函数。
关于回调函数,我个人建议不要使用代码生成工具的。因为,着实不好用。
配置完串口接收之后还要配置串口发送,如图,这个我就不解释了,直接看图吧
点击IICA0,非主即从,这里以主为例
然后点击Setting,设置地址为16,速度100K,中断级别为1。
然后点击A/D Converter
介绍一下我的设置,关闭电压比较、10位精度、正参考源 为VDD,负参考源为VSS(使用非电源参考源的时候需要牺牲一路AD通道,具体是那一路需要看datasheet),软件触发、单次触发、输入通道选择单路ANI0,优先级为1.
因为我只开启了一路AD,所以没有开启中断,设计思路是定时触发AD,每次触发前将AD值取回来,然后再触发,ADC采样时间是微秒级的,而我的定时采样时间为20ms。
点击Project Tree的Timer
点击TAU0,这里我只介绍定时中断和脉宽检测
然后点击Channel0,如图,不解释了
然后是Channel 3 的介绍,选择下拉框TI03 interval range,可以选择测量的范围,这是一个16位计数器,当接收到触发边沿的时候,开启计数,直到溢出或者另一个计数边沿被检测到,触发的边沿可以选择为双边沿、下降沿、上升沿触发,这个外功能我主要是用于红外检测,红外检测我会在另外一篇博文讲解,这里不表。
然后点击Project Tree的Watchdog Timer,一般不在HALT/STOP/SNOOZE模式下开启看门狗,关于芯片的运行模式需要自行查看datasheet,不同的模式启用的时钟不一样,主要是为了实现低功耗,不同的模式唤醒机制也不一样。我配置的看门狗使用的溢出时间是最长的,下拉框可选,开窗期为百分之百,优先级最高。
点击Real-time Clock,这个实时时钟比较简单,我只是选择了24小时,默认是12小时制,至于其他的功能,本人感觉使用价值不高,建议自己实现。
点击Interval Timer,这个就不解释了,看图吧
选择Clock Output/Buzzer Output,这个主要做蜂鸣器输出
DMA Controller没有使用过,请读者自行摸索
然后是Voltage Detector,这个是低电压检测,当电压低于设置阈值的时候,产生低压检测中断,当电压高于阈值的时候,再次进入中断。检测原理我不懂,这个功能的目的是检测电源电压是否小于阈值,然后在进入低压中断的时候将各个外设关闭,io口电平降低或者高阻态,然后利用STOP();这个函数进入STOP模式,进入低功耗之后,只运行RT时钟,其他时钟全部关闭,按照datasheet,功耗为5uA,RAW的值保持,这在实现低功耗的时候是有用的。关于各个运行模式下的时钟运行状态,请看datasheet。
设置完上述内容之后点击,Generate Code。
图中的代码就是插件给用户生成的代码。
各个外设的底层函数在r_systeminit.c中调用,函数为R_Systeminit();这个函数在调用mian()之前就已经调用了。
然后用户需要使用某个外设的时候任然需要自己去启用它,需要将代码写入到R_MAIN_UserInit()这个函数的
/* Start user code. Do not edit comment generated here */
EI();
R_TAU0_Channel0_Start();
/* End user code. Do not edit comment generated here */
注释中间,比如需要使用定时器,需要在r_cg_timer.h这个文件中找到相应的函数R_TAU0_Channel0_Start();并将其写入到R_MAIN_UserInit()。
大部分外设都需要这么写,看门狗不用,GPIO也不用,GPIO的调用仍然是使用寄存器的,没有相应的API可以用,需要自己设置方向以及高低电平。
关于生成的源码,基本上直接修改代码生成插件就可以了,用户一般不用去自己修改代码,当然,一些特殊的需求需要自己写,比如实现串口的接收和发送,我不喜欢代码生成工具写的那种方式,不符合我的需求,所以,每次在使用代码生成的时候,注意做好备份。
一般而言r_cg_cgc.c这样的源文件是外设的初始化文件,然后r_cg_cgc_user.c这样带user的文件就是中断函数所在的源文件,一般我们在修改中断函数或者添加代码的时候,都要把用户添加的代码添加到
/* Start user code for include. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
中间。否则,下一次点击生成代码的时候用户代码会被覆盖掉。
用户可以自行添加用户源文件,添加后IDE自动添加搜索路径,不用自己再次添加搜索路径。右键点击file->Add即可。
关于中文支持,我听过一个论调,CS+ for CA不支持中文,额,我也被困扰过一段时间,说实话,这个IDE对中文的支持度确实很差,而且不支持在代码后面添加“//”注释。
下面说一下方法,这个方法应该也适用于CS+ for CC
点击菜单栏的Tool->Options,然后关闭代码的自动检测功能,图中标记处
然后点击Project Tree栏下的CA78K0R(Build tool),再点击工作区的Compile Options->Extension->Kanji Chacter code of source 选择如图所示的选项,然后就可以在/* */这种注释里面使用中文了。
然后关于编译器的选项,下次再说吧。按照我上面说的去配置,基本能进行简单的编程了。