极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4682|回复: 12

CooCox群课系列之CoSmart

[复制链接]
发表于 2012-9-17 09:52:16 | 显示全部楼层 |阅读模式
CooCox CoSmart是一种智能管脚配置和代码自动生成工具。提供复用管脚选择、设置、冲突检测功能,还可以自动生成相关外设初始化代码。

功能:
        配置管脚复用设置
        分析管脚配置冲突
        指明I/O引脚特征
        生成可用的C代码
Cosmart.png

这边给的是一个cosmart的整体视图。接下来我会先安装cosmart软件安装,然后演示用cosmart配置一个芯片的初始化代码,管脚冲突检测的简单示例,快速让大家了解cosmart的功能及用法。 cosmart是一个开放软件,用户可以编写自己的芯片文件,配置模板,丢入cosmart相关路径中支持使用,所以最后我会向大家介绍cosmart的模板语法,芯片文件编写格式。

首先下载安装Cosmart,可以直接到coocox网站下载安装,链接在
http://www.coocox.com/CN/CoSmart.html , 不过推荐还是通过CoCenter管理软件下载安装,原理如上一堂课讲的一样,方便软件管理升级。

在CoCenter中CoSmart一栏点击Download,
cosmart_down.png

下载完毕点击install
cosmart_install1.png

选择安装路径,我使用的是D:\Program Files\CooCox\CoSmart
cosmart_install2.png

点击next直到安装完毕
cosmart_install3.png

Ok现在安装完成点击finish
cosmart_install4.png

和CoIDE一样,可以直接从桌面快捷方式打开,可以从Cocenter打开,我直接从Cocenter打开了。
使用CoSmart进行管脚配置和生成可用的C程序,你需要执行以下步骤:
        1. 启动CoSmart后,单击New Chips来选择芯片。
cosmart_start1.png

        2. 选择一个厂商,如: Nuvoton。
cosmart_start2.png

        3. 选择一个芯片,如:NUC140LE3CN,在芯片页面会显示管脚配置。
cosmart_start3.png

4、勾选你需要的外设,比如GPIOA, cosmart将在左下侧显示配置选项。
cosmart_start4.png

当鼠标聚焦到某个外设上面时,对应的管脚会变黄色,如上面管脚黄亮的就是GPIOA的管脚。一眼就可以看到GPIOA的管脚分布。
上面的管脚使能或者除能你可以在左边的配置选项中配置,配置选项都是对于外设初始化配置的,对于GPIO的初始化大致有这些功能。
管脚是否使能
管脚模式配置(输入输出,开漏,推挽)
中断是否使能
等等。。。
配置视图里面可以大致看一下,给出的对以上的配置选项
cosmart_start6.png

例如我使能GPIOA 的PA0,PA1,对应的pin会变成使能状态,变为蓝色。
cosmart_start5.png

在左上角的外设视图中出现有你勾选的外设,GPIOA和UART, 你可以在这里点击不同外设,这样左下角的配置就会相应改变,比如现在已经切换到UART配置界面了。
我现在在任意配置一下UART0,然后点击工具栏的Generate C Code按钮生成GPIOA和UART0外设的初始化代码c文件。
cosmart_start7.png

在左上角的外设视图中出现有你勾选的外设,GPIOA和UART, 你可以在这里点击不同外设,这样左下角的配置就会相应改变,比如现在已经切换到UART配置界面了。
我现在在任意配置一下UART0,然后点击工具栏的Generate C Code按钮生成GPIOA和UART0外设的初始化代码c文件。
cosmart_start8.png

可以看到生成的代码中有GPIOA_Init和UART0_Init()两个外设的初始化代码。这个代码可以直接以源文件形式加入到CoIDE中使用。其实Cosmart不仅仅能生成外设初始化代码的源文件,也可以直接生成CoIDE的工程,在工具栏中点击Generate CoIDE Project, 就可以生成CoIDE工程,可以指定生成工程路径,我就使用默认路径了,名字叫做Cosmart_Test
cosmart_start9.png

打开对应的路径看看。
cosmart_start10.png

直接双击Cosmart_Test.cob文件,打开这个工程,看看刚才生成的初始化代码可否使用。
cosmart_start11.png

可以看到Init.c文件就是cosmart自动生成的外设初始化文件,而且外围组件页的UART,GPIO以及依赖租价都自动勾选上了,并且在main.c文件里面已经自动调用了这个初始化文件,如图
cosmart_start12.png

现在直接编译这个工程试试。
cosmart_start13.png

编译ok,这样工程里的外设初始化部分,包括时钟配置都可以用Cosmart来配置喽。是不是挺好用的,这里我就不演示调试这个代码的功能了。接下来介绍Comsart的另一个功能,管脚冲突检测。
因为ARM Cortex MCU基本都存在有多功能管脚复用的情况,比如一个管脚可以配置成为GPIO功能,也可以配置成UART等等,但在某一时刻只能使用其中的一个功能,如果一个管脚同时用两个功能,那么这肯定会冲突的,这个时候Cosmart可以自动检测出来设计中是否存在管脚冲突。例如上面例子中所使用的芯片NCU140LE3CN 的17号管脚,可以配置成为PB0,也可以配置成为UART0的RXD0管脚,我现在如果同时使能这两种情况,看看会是什么情况。
勾选UART0,GPIOB可以看到在UART0配置选项中RXD0默认使能了,
cosmart_start14.png

这个时候在切换到GPIOB的配置视图中,并使能PB0管脚看看会发生什么现象
可以看到红色高亮很醒目的显示出17号管脚冲突,并且GPIOB与UART0两个外设也红色高亮,表示是这两个外设发生了冲突,用户需要去检查这两个外设的什么脚发生了冲突,重新设计即可。
最后Cosmart可以生成一个芯片管脚使用情况的表单。我现在随便使能一些管脚,然后点击工具栏的Generrate Pin Report按钮。
cosmart_start16.png

这是整个MCU 48个管脚的使用情况表单,清晰的可以看出这里面用了哪些管脚,被使能的管脚是什么外设功能,哪些没有用,这可以帮助用户合理的分配利用资源。此外你也可以选择只查看所选择模块的管脚使用情况,点击工具栏的Generate Module Report按钮可以只查看所勾选的模块管脚使用情况 cosmart_start17.png
如上图,可以看到我选择的三个外设,GPIOB,I2C1,UART0的管脚状态。当然生成的初始化代中会将所使能的管脚设置成相应功能。
Cosmart的基本使用功能就讲完了。由于Cosmart对用户完全开放,用户可以用Cosmart支持自己的芯片,或者根据自己的需要编写自己的外设配置模板,生成的配置视图就可以达到自己想要的配置选项。并且代码配置模板也是可以按照自己意愿编写的。
我就从支持一个新的系列芯片角度出发,全面介绍用户应用准备什么东西,主要有两个。
第一,        芯片文件,芯片视图就是根据这个芯片文件生成的。
第二,        模板文件,配置模板和代码模板都在这个文件里面。
将准备好的文件按照规则放入到Cosmart路径下面就ok了,重新打开cosmart就可以看到新支持的芯片并可使用。

关于芯片文件主要就是按照规定的格式编写就可以了,很简单。打开cosmart路径下得一个芯片文件看看,在这个路径C:\Program Files\CooCox\CoSmart\cosmartrepo\PinData,
就打开这个例子中的NUC140LE3CN,
cosmart_file1.png

芯片文件的编写格式如下这样的:
1. 芯片手册简单介绍
芯片手册主要是提取数据手册里面的管脚描述信息,根据最新的数据手册编写芯片手册。CoSmart里的芯片图会根据芯片手册的信息来显示芯片的封装,以及芯片具有的外设,以及外设所对应的管脚,还有各个管脚的名字及其功能描述。

2. 芯片手册编写
使用Dreamweaver或者直接用记事本打开一个已有的芯片手册在上面进行修改即可。按照以下格式的规范即可快速编写出芯片手册。
整个芯片文件是以下面的格式进行编写的:
<?xml version="1.0" encoding="utf-8" ?>
<Device Name = "NUC140VE3AN" Package="LQFP100">
    <Pins>
        <Pin PinID="1">
            <Func Name = "PE15" Group = "GPIOE" Description = "Port E GPIO 15" />
        </Pin>
        <Pin PinID="2">
            <Func Name = "PE14" Group = "GPIOE" Description = "Port E GPIO 14" />
        </Pin>
         ……
         ……
        <Pin PinID="99">
            <Func Name = "PVSS" Description = "PLL Ground" />
        </Pin>
        <Pin PinID="100">
            <Func Name = "PB8" Group = "GPIOB" Description = "Port B GPIO 8" />
              <Func Name = "STADC" Group = "ADC" Description = "ADC external trigger input"/>
            <Func Name = "TM_0" Group = "Timer0" Description = "Timer0 external counter input" />
        </Pin>
    </Pins>
</Device>
其中<?xml version="1.0" encoding="utf-8" ?>描述的是xml的版本和编码格式,芯片手册的第一行都这样写。
根节点描述芯片名称和封装类型如下:
<Device Name = "NUC140VE3AN" Package="LQFP100">
……
</Device>
Device节点下面的子节点<Pins>……</Pins>之间是管脚描述信息。管脚描述信息包括管脚号,管脚名字,该管脚属于哪个外设,以及简单的管脚功能描述。 比如<Pin PinID="1">表示管脚号为1,Func Name = "PE15"表示此管脚名字是PE15,Group = "GPIOE"它属于GPIOE外设,Description =  "Port E GPIO 15"是管脚的简单描述。
有些管脚不属于任何外设(比如上面99管脚),此时就不用写Group属性,只给出管脚名及简单描述即可。
有写管脚是复用功能(比如上面100管脚),此时一次列出管脚各功能名,所属的外设,以及对应的简单描述即可。
以上信息可以从数据手册里面Pin Description提取。

3. 注意地方
   有些管脚名字可能带 ‘.’ 这种符号的(比如PE.15),为了保持生成代码的可编译性,一般都写成PE15,去掉编译通不过的这些特殊符号。(碰到类似问题时候具体再提出来)。
编写好了芯片文件,放到对应厂商系列目录下就好。

关于配置模板的编写要了解Cosmart所使用的语法格式。语法其实就是定义的xml的一些标签。
下面介绍相关的标签,配置配置视图是如何由这些标签生成的。

<group> </group>是生成一个组的标签,一个group可以有包含几个子配置项,子配置想有:<list> </list>是单选下拉框提供可配置的选项值,<input> </input>输入框接收用户的输入值。
例如我配置模板中的定义如下
/*****<<config wizard begin>>******
<group> UART Basic Configuration
<list> DataBits
        <DRVUART_DATABITS_8=> 8 bits
        <DRVUART_DATABITS_5=> 5 bits
        <DRVUART_DATABITS_6=> 6 bits
        <DRVUART_DATABITS_7=> 7 bits
<code> $u32DataBits$
<list> StopBits
        <DRVUART_STOPBITS_1=> 1 bit
        <DRVUART_STOPBITS_1_5=> 1.5 bits
        <DRVUART_STOPBITS_2=> 2 bits
<code> $u8cStopBits$
</group>
*******<<config wizard end>>*****/
生成的配置视图截图如下
cosmart_file2.png

再解释一下上面那段配置模板的意思,<group>后面字符串代表这一组配置的名字,比如例子中
<group> UART Basic Configuration。<list> 后面字符串表示此单选配置的名字,比如例子中<list> DataBits,其他的标签后面所跟的名字都是类似这个功能。 上面的<code>标签描述配置界面上某一个配置和初始化函数模板里可变的代码片段的对应关系,所谓可变的代码片段就是$u8cStopBits$以两个美元符号包括起来的一个变量,一般一个<list>,<input>标签都需要一个<code>标签来适时保存用户所选择的配置,比如上面图中DataBits选择的是8Bits,就会把<DRVUART_DATABITS_8=> 8 bits 这个里面的DRVUART_DATABITS_8“赋值”给$u32DataBits$,而代码模板的多配置实现就是用了一些#if…判断加上这些可变的代码片段实现的,点击Generate C Code按钮时候,利用编译器的预编译和java上层的字符串替换功能生成出用户配置的初始化代码。例如下面的代码




void UART_Init(){
STR_UART_T     UartParam;
UartParam.u8cDataBits = $u8cDataBits$;
UartParam.u8cStopBits = $u8cStopBits$;
}

经过上面的配置生成的初始化代码如下
void UART_Init(){
STR_UART_T     UartParam;
UartParam.u8cDataBits = DRVUART_DATABITS_8;
UartParam.u8cStopBits = DRVUART_STOPBITS_1;
}

关于配置模板的一些更多的用法,这里不打算介绍了,大家要是觉得使用cosmart比较爽,要想自己支持一些芯片,可以再多研究一下语法,和模板编写。详细的语法手册上面有更具体的应用介绍,到时候可以一并附件发
cosmart_start15.png
回复

使用道具 举报

发表于 2012-9-17 10:11:02 | 显示全部楼层
{:soso_e103:} 全自动工具。好东东。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-17 10:58:28 | 显示全部楼层
弘毅 发表于 2012-9-17 10:11
全自动工具。好东东。

回复 支持 反对

使用道具 举报

发表于 2012-9-18 13:20:20 | 显示全部楼层
不错不错,好东西
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-18 14:12:22 | 显示全部楼层
可可 发表于 2012-9-18 13:20
不错不错,好东西

谢谢支持啊......
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-18 14:12:29 | 显示全部楼层
可可 发表于 2012-9-18 13:20
不错不错,好东西

谢谢支持啊......
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-18 14:12:30 | 显示全部楼层
可可 发表于 2012-9-18 13:20
不错不错,好东西

谢谢支持啊......
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-18 14:12:33 | 显示全部楼层
可可 发表于 2012-9-18 13:20
不错不错,好东西

谢谢支持啊......
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-18 14:12:36 | 显示全部楼层
可可 发表于 2012-9-18 13:20
不错不错,好东西

谢谢支持啊......
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-18 14:12:44 | 显示全部楼层
可可 发表于 2012-9-18 13:20
不错不错,好东西

谢谢支持啊......
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-18 14:13:08 | 显示全部楼层
可可 发表于 2012-9-18 13:20
不错不错,好东西

谢谢支持啊......
回复 支持 反对

使用道具 举报

发表于 2012-9-18 14:22:17 | 显示全部楼层
还好还好啦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-18 16:59:35 | 显示全部楼层
可可 发表于 2012-9-18 14:22
还好还好啦

出现了一位妹纸
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2019-1-21 16:34 , Processed in 0.057902 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表