SemiDrive E3_Port_Dio 总结文档

一、概述

本篇文章主要描述了 E3 的 GPIO 口作为 input/output 时的具体设置。

 

二、 HandsOn 1

       选取一个 port,配置为 DO,在测试程序中实现拉高,拉低,反转。在 jlink 仿真时使用 IAR 单步执行,并打开 memory 显示窗口,输入 port 对应的输出值地址,观察对应Bit 位的变化。

选取的 port 为 GPIO_B10 ,使用 example 示例程序中的 dio_example.c 实现( E3110 ):

1、在 EB 项目下,在 E3_ref_getway 下打开 port 组别,在 port 栏下选择“PortContainer”标签,

添加 GPIO_B 的 PortContainer ;

 PortNumberOfPortPins 是显示使用了多少个 IO 口;

 PortNumberOfPortPins 表示该组 GPIO 中实际配置的 PortPin数目。

         

         2、进入 GPIO_B 内,选择 PortPin 标签,添加命名为 Naib_out 的 PortPin ,其中PortPinId 列需从 1 开始,而非 0。

         3、进入 PortPin 设置 Port 参数,其中 PinID 选择使用的 GPIO 口 GPIO_B10 ,Mux 复用功能选择 GPIO。



       4、配置 Dio ,因为使用的 GPIO_B10 ,根据 SD tool ,其 ChannelID 为 55,属于 port1,所以加入到已存在的 DioPort_1 内,如其他组别的 GPIO ,则使用加号,添加对应的组别,并设 DioPortId为对应组别数字。





       5、配置完成后,保存,并检查和生成代码。



       6、完成后,可以在输出的代码中查看配置的参数, output/src/Port_Cfg.c 文件末尾, 可以看到新配置的 GPIO_B10  参数。

 

宏定义 DioConf_DioChannel_Naib_Ch ,在 EB 生成 C 文件时产生,在项目文件\MCAL_release\Mcal_Cfg\E3_ref_gateway\output\include\Dio_Cfg.h 文件内。

        7、使用 IAR 打开项目文件  \MCAL_release\iar\iar_v850\E3_ref_176_E3110  下的工程文件,使用 test_suite/dio_example 示例程序,实现拉高、拉低和反转。

Dio_WriteChannel(ChannelId, level) 函数为对应 ChannelId 的 GPIO 口输出电平。

Dio_FlipChannel(ChannelId) 函数为反转对应 ChannelIdId 的 GPIO 口输出电平。

        ①设置断点,检查编译并下载 debug 程序,点击运行。点击菜单栏 View – Memory ,添加Memory 1 窗口。

        ②在串口软件中发送 dio test ,则会进入 dio_test() 函数,停在断点处。

        GPIO_B10 的地址计算:

        GPIO_B10 的ChannelId为55,属于 Port1,为 GPIO_SAFETY ,起始地址为 0xF074_0000;

        Port1 的偏移地址 offset 为 0x680+(1*0x10)=0x690 ;两个地址相加: 0xF074_0690



 

三、HandsOn 2

       选取一个 port,配置为 DI ,并使能中断模式,编写测试代码,在中断处理函数中打印对应的 port ID。运行后给对该 port 输入配的的中断触发信号,在终端能够观察到打印信息。

       1、因为需要使用中断功能,所以需将 Port 的 PortSetPinINTDetect 功能打开。

       2、添加命名为 DI 的 PortPin ,配置引脚上电默认输出电压为高电平,中断触发方式为下降沿触发。

 

      3、在 IAR 项目内,打开 dio_example.c 文件,添加头文件 Dio_Irq.h ,和 irq_test() 函数,并在 dio_test() 函数内加入 irq_test() 函数。

       ①添加的 irq_test() 函数为关联中断标志和中断函数,因为 GPIO_B10 属于 GPIO_SAFETY port1,所以使用 GPIO_SF_SYNC_GRP_1_INTR_NUM;

       ②因为中断函数 GPIO_Irq4Handler 内 id 会自减 1 ,所以使用 2 ;中断函数 GPIO_Irq2Handler 定义在 Dio_Irq.h ,所以添加头文件 Dio_Irq.h;

③使能 GPIO_SF_SYNC_GRP_1_INTR_NUM。



4、进入中断后:

        在 Dio_IP.C 文件内一层一层调用函数, GPIO_Irq4Handler() -> Dio_Ip_IrqHandler()->

        Dio_UserCallouts(),进入 Dio_UserCallouts.c 文件。

        在文件内添加头文件 Dio_Cfg.h 和 debug.h ,和 switch case 并打印传参对应的ChannelId 的程序。

        Dio_Cfg.h 是 GPIO_B10 的宏定义 DioConf_DioChannel_DO_IN 文件, debug.h 是函数 PRINT() 文件。

 
    5、编译并烧录程序后,通过串口软件写入 dio test ,再使用杜邦线将地和 GPIO_B10 引脚短接后松开,串口软件中会打印对应的串口数据。

              

四、Reference:

[1] E3系列MCAL_Example_Description_

        [2] SemiDrive_E3_MCAL_User_Guide_Rev02.00



欢迎在博文下方留言评论,我们会及时回复您的问题。如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com

作者:Naib Zhou / 周甜甜


★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论