3、英飞凌AURIX TC3XX GPIO-LED实验

AURIX TC3XX GPIO-LED实验

声明:本文是在学习英飞凌 TC3XX系列多核 MCU 过程中整理的笔记,便于后期复习!

1、GPIO特征

控制最多16条端口;

通过软件能够控制每个端口的输出;

输出修改寄存器易于清除、设置和切换单个端口线和端口线的微调,而不影响其他端口的状态;

通过软件可以读取每个端口行的输入值;

每个输出最多可提供7个复用函数;

支持每个端口的直接I/O控制;

控制指定垫片的垫片特性,如驱动强度、转换速率、上/下拉、推/拉或开漏操作,以及TTL或CMOS/汽车输入电平的选择;

紧急停止功能允许通过SMU或特殊端口引脚关闭可配置端口线的输出驱动器;

对于具有LVDS功能的pad对,它控制LVDS特性,并允许在LVDS和CMOS模式之间切换;

在减少引脚数的包中,端口模块可以禁用选定的引脚。

2、GPIO 模式

TC3XX系列芯片 GPIO共有五种模式

NO_PULL, //无输入上下拉
PULLUP, //输入上拉
PULLDOWN, //输入下拉
PUSHPULL, //推挽输出
OPENDRAIN, //开漏输出

3、GPIO 通用寄存器

3.1、IOCR0-端口n输入/输出控制寄存器0

寄存器作用:

端口输入/输出控制寄存器选择一个GPIO端口引脚的数字输出和输入驱动程序的功能和特性。输入的端口方向(输入或输出)、上拉、下拉或无拉设备,以及输出的推拉或开漏功能,可由相应的位字段PCx(x=0-15)选择。每个32位宽端口输入/输出控制寄存器控制四条GPIO端口线:

寄存器Pn_IOCR0控制Pn [3:0]端口线路;

寄存器Pn_IOCR4控制Pn [7:4]端口线路;

寄存器Pn_IOCR8控制Pn [11:8]端口线路;

寄存器Pn_IOCR12控制Pn [15:12]端口线路。

在这里插入图片描述

功能
PCx (x=0-3):8* x+7:8*x+ 3可读可写,引脚x的端口控制
0:26:24, 18:16, 10:8,2:0读取为0,应该用0写入
3.2、OMR-端口n输出修改寄存器

在这里插入图片描述

功能
0~31设置此位将在端口输出寄存器Pn_OUT中设置或切换相应的位。读取为0。该位元的函数显示为:0-不操作、1-设置或切换Pn_OUT.Px。
3.3、PDR0-端口n驱动程序模式寄存器0

在这里插入图片描述

4、GPIO 函数

4.1、设置GPIO 状态函数
void IfxPort_setPinState(Ifx_P *port, uint8 pinIndex, IfxPort_State action)
{
    port->OMR.U = action << pinIndex;
}

参数:

port:GPIO 端口号

pinIndex:高低电平

4.2、设置GPIO输出模式
void IfxPort_setGroupModeOutput(Ifx_P *port, uint8 pinIndex, uint16 mask, IfxPort_OutputMode mode, IfxPort_OutputIdx index)
{
    uint32 i;
    uint32 iocrVal[4];
    uint32 iocrMask[4];

    IFX_UNUSED_PARAMETER(index == IfxPort_OutputIdx_general);

    /* initialise */
    for (i = 0; i < 4; i++)
    {
        iocrVal[i]  = 0;
        iocrMask[i] = 0;
    }

    /* calculate IOCRx values and masks */
    uint32 imask = (uint32)mask << pinIndex;

    for (i = pinIndex; i < 16; i++)
    {
        if ((imask & (1U << i)) != 0)
        {
            uint32 index = i / 4;
            uint32 shift = (i & 0x3U) * 8;
            iocrMask[index] |= (0x1FU << 3) << shift;
            iocrVal[index]  |= (mode | index) << shift;
        }
    }

    /* write IOCRx */
    for (i = 0; i < 4; i++)
    {
        if (iocrMask[i] != 0)
        {
            __ldmst(&((&(port->IOCR0.U))[i]), iocrMask[i], iocrVal[i]);
        }
    }
}
2、设置GPIO输出高电平
void IfxPort_setPinHigh(Ifx_P *port, uint8 pinIndex)
{
    IfxPort_setPinState(port, pinIndex, IfxPort_State_high);
}

port:GPIO端口号

pinIndex:1-高电平、0-低电平

3、设置GPIO输出低电平
void IfxPort_setPinLow(Ifx_P *port, uint8 pinIndex)
{
    IfxPort_setPinState(port, pinIndex, IfxPort_State_low);
}

port:GPIO端口号

pinIndex:1-高电平、0-低电平

4、设置GPIO翻转电平
void IfxPort_togglePin(Ifx_P *port, uint8 pinIndex)
{
    IfxPort_setPinState(port, pinIndex, IfxPort_State_toggled);
}

port:GPIO端口号

pinIndex:1-高电平、0-低电平

5、读取GPIO电平
boolean IfxPort_getPinState(Ifx_P *port, uint8 pinIndex)
{
    return (__getbit(&port->IN.U, pinIndex) != 0) ? TRUE : FALSE;
}

port:GPIO端口号

pinIndex:1-高电平、0-低电平

5、GPIO 测试实验

使用逐飞TC377系列核心板,板上有4路LED,原理图如下:

在这里插入图片描述

实验:实现点灯,熟悉GPIO使用。

5.1、新建工程,File-New-New AURIX Project

在这里插入图片描述

5.2、新建工程名:TC377_LED

在这里插入图片描述

5.3、选择芯片和开发板,也可以选择自定义板: Custom Board

在这里插入图片描述

5.4、激活工程,鼠标右击:Set Active Project

在这里插入图片描述

5.5、新建工程如下:

在这里插入图片描述

5.6、在CPU0初始化LED
#include "Ifx_Types.h"
#include "IfxCpu.h"
#include "IfxScuWdt.h"
#include "Bsp.h"

IFX_ALIGN(4) IfxCpu_syncEvent g_cpuSyncEvent = 0;

void core0_main(void)
{
    IfxCpu_enableInterrupts();
    
    /* !!WATCHDOG0 AND SAFETY WATCHDOG ARE DISABLED HERE!!
     * Enable the watchdogs and service them periodically if it is required
     */
    IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());
    IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());
    
    //initTime(); /* Calculate iLLDs time constants   */
    IfxPort_setPinModeOutput(&MODULE_P20,8, IfxPort_OutputMode_pushPull, IfxPort_OutputIdx_general);
    IfxPort_setPinHigh(&MODULE_P20,8);   //Switch OFF the LED (low-level active)

    /* Wait for CPU sync event */
    IfxCpu_emitEvent(&g_cpuSyncEvent);
    IfxCpu_waitEvent(&g_cpuSyncEvent, 1);
    
    while(1)
    {
        IfxPort_togglePin(&MODULE_P20,8);       /* Toggle the state of the LED*/
        waitTime(500);          /* Wait 500 milliseconds*/

    }
}

5.7、编译并下载

在这里插入图片描述
在这里插入图片描述欢迎各位大佬关注我的公众号:Kevin的学习站,测试例程将会上传到公众号,需要的小伙伴可以下载,整理不易,但您的点赞、关注、收藏就是对我最大的鼓励!

在这里插入图片描述

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kevin的学习站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值