TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED

  • 一、DIO配置
    • 1、配置目标
    • 2、目标依赖
      • 2.1 硬件使用
      • 2.2 软件使用
      • 2.3 新增模块
    • 3、EB配置
      • 3.1 配置讲解
      • 3.2 模块配置
        • 3.2.1 PORT配置
        • 3.2.2 DIO配置
        • 3.2.3 MCU配置
        • 3.2.3 ResourceM配置
    • 4、ADS代码编写及调试

-> 返回总目录-<

一、DIO配置

1、配置目标

使用TC397 KIT,点亮LED D107,D108,D109,D110。单独500ms亮灭,并在最后以group形式一起亮灭。

2、目标依赖

2.1 硬件使用

使用TC397 KIT开发板,硬件上的LED D107,D108,D109,D110。

2.2 软件使用

使用TC397 EB MCAL开发从0开始系列 之 [2.0] PORT配置 - 上电点亮LED对应的ADSEB基础工程。

2.3 新增模块

增加DIO模块,增加对MCU STM系统定时器的使用。

3、EB配置

3.1 配置讲解

具体可在MC-ISAR_TC3xx_UM_Basic.pdfMC-ISAR_TC3xx_Config_Verification_Manual_BASIC.pdf中查看模块的配置描述,和配置生成动态代码描述。

3.2 模块配置

首先在基础工程中添加DIO模块。
TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第1张图片

3.2.1 PORT配置

配置PORT模块,选中PORT13,因为LED对应的为P13.0-P13.3。
TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第2张图片
修改PORT名称,这个在生产代码中不会体现,只是方便去看EB的PORT配置用途。
TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第3张图片
配置默认为输出,高电平,低电平时LED打开,因此初始化PORT时希望LED为关闭。
TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第4张图片

3.2.2 DIO配置

添加DIO的PORT,有多少个PORT添加多少组,比如这里是P13,只用了一组,我们添加一个即可。
TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第5张图片
Dio Port需要和具体对应,即DioPortId对应Port端口号,即P13。
TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第6张图片

该DioPort有几个Pin需要控制,就添加几个,我们这里是4个,添加后修改Name,并且确认DioChannelId与P13.0-P13.3对应。 TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第7张图片
添加DioChannelGroup,Group是作为一组控制的方法,可一起控制Port输出。由于我们测试功能里需要一起控制的功能,因此添加一个,正常使用不需要一起控制时不需要添加。
TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第8张图片

DioPortMask这个应该定义为channel的位置,即二进制对应的bit位,我们用的是P13.0-P13.3,在DioChannelId 中对应0-3,即00001111=0xf。

TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第9张图片

在Dio_Cfg.h中配置生成代码如下:

/*
DIO PORT : (DioPort_0)
*/
#ifndef DioConf_DioPort_DioPort_0
#define DioConf_DioPort_DioPort_0 (DIO_PORT_13)
#endif
/* DIO Channel : (D107_LED_P13_0) */

#ifndef DioConf_DioChannel_D107_LED_P13_0

#define DioConf_DioChannel_D107_LED_P13_0 (DIO_CHANNEL_13_0)
#endif
/* DIO Channel : (D108_LED_P13_1) */

#ifndef DioConf_DioChannel_D108_LED_P13_1

#define DioConf_DioChannel_D108_LED_P13_1 (DIO_CHANNEL_13_1)
#endif
/* DIO Channel : (D109_LED_P13_2) */

#ifndef DioConf_DioChannel_D109_LED_P13_2

#define DioConf_DioChannel_D109_LED_P13_2 (DIO_CHANNEL_13_2)
#endif
/* DIO Channel : (D110_LED_P13_3) */

#ifndef DioConf_DioChannel_D110_LED_P13_3

#define DioConf_DioChannel_D110_LED_P13_3 (DIO_CHANNEL_13_3)
#endif
/*DIO Channel Group : DioChGrpId_P13_0*/

#ifndef DioConf_DioChannelGroup_DioChannelGroup_0

#define DioConf_DioChannelGroup_DioChannelGroup_0 (&Dio_Config.Dio_ChannelGroupConfigPtr[0])
#endif

3.2.3 MCU配置

工程中使用到了定时,延时功能,需要使用系统定时器,这里只用了Stm的Tick,不需要添加STM模块,使用MCU的STM即可。
在McuHardwareResourceAllocationConf_0中的McuStmAllocationConf,配置使用STM0,CMP0
TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第10张图片
配置使用STM0,CMP0给STM。
TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第11张图片

3.2.3 ResourceM配置

配置使用资源,分配核,在CORE0中添加STM,McuStmAllocationConf_0。
TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第12张图片

4、ADS代码编写及调试

将Dio静态代码拷贝到工程中
TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第13张图片

将EB的动态生成代码拷贝覆盖到工程中。
TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第14张图片
TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第15张图片

打开ADS,设置Active(可以编译调试)。
TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第16张图片
开始调试,点击小甲虫。
TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第17张图片
烧录完成后,直接run,看板子上的LED0-LED3亮灭变化。
TC397 EB MCAL开发从0开始系列 之 [3.0] DIO配置 - 周期点亮LED_第18张图片

main中的源码如下,可按照功能运行,LED0-LED3先亮灭0.5s,最后再一起亮灭0.5s,周期往复。

#include "Ifx_Ssw_Infra.h"
#include "IFX_Os.h"

#include "Port.h"
#include "Dio.h"
#include "McalLib.h"


//stm 100MHZ ticks 0.00000001s, 1s 100000000
void delay_ms(uint32 ms)
{
  uint32 CurrSTMTick = Mcal_DelayGetTick();
  uint32 BaseSTMTick = CurrSTMTick;
  while ((uint32)((CurrSTMTick - BaseSTMTick) & 0xffffffff) <
           ms * 100000)
  {
    CurrSTMTick = Mcal_DelayGetTick();
  }
}


void core0_main (void)
{
  volatile unsigned short LoopFlag = 1U;
  unsigned short cpuWdtPassword;
  unsigned short safetyWdtPassword;


  ENABLE();
  /*
   * !!WATCHDOG0 AND SAFETY WATCHDOG ARE DISABLED HERE!!
   * Enable the watchdog in the demo if it is required and also service the watchdog periodically
   * */
  cpuWdtPassword = Ifx_Ssw_getCpuWatchdogPassword(&MODULE_SCU.WDTCPU[0]);
  safetyWdtPassword = Ifx_Ssw_getSafetyWatchdogPassword();
  Ifx_Ssw_disableCpuWatchdog(&MODULE_SCU.WDTCPU[0], cpuWdtPassword);
  Ifx_Ssw_disableSafetyWatchdog(safetyWdtPassword);

  /* init gpio high, led close */
  Port_Init(&Port_Config);

  while (LoopFlag == 1U)
  {
    /* close led */
    Dio_WriteChannel(DioConf_DioChannel_D107_LED_P13_0, STD_HIGH);
    delay_ms(500);
    /* open led */
    Dio_WriteChannel(DioConf_DioChannel_D107_LED_P13_0, STD_LOW);
    delay_ms(500);

    Dio_WriteChannel(DioConf_DioChannel_D108_LED_P13_1, STD_HIGH);
    delay_ms(500);
    Dio_WriteChannel(DioConf_DioChannel_D108_LED_P13_1, STD_LOW);
    delay_ms(500);

    Dio_WriteChannel(DioConf_DioChannel_D109_LED_P13_2, STD_HIGH);
    delay_ms(500);
    Dio_WriteChannel(DioConf_DioChannel_D109_LED_P13_2, STD_LOW);
    delay_ms(500);

    Dio_WriteChannel(DioConf_DioChannel_D110_LED_P13_3, STD_HIGH);
    delay_ms(500);
    Dio_WriteChannel(DioConf_DioChannel_D110_LED_P13_3, STD_LOW);
    delay_ms(500);


    Dio_PortLevelType GroupLevel;

    GroupLevel = 0xf; // set gpio high, led close
    Dio_WriteChannelGroup(DioConf_DioChannelGroup_DioChannelGroup_0, GroupLevel);
    delay_ms(500);

    GroupLevel = 0; // set gpio high, led open
    Dio_WriteChannelGroup(DioConf_DioChannelGroup_DioChannelGroup_0, GroupLevel);
    delay_ms(500);
  }
}

->返回总目录-<

你可能感兴趣的:(EB,MCAL运行工程,mcu,自动驾驶)