英飞凌TC3XX系列多核MCU学习笔记(1)

控制/MCU

1813人已加入

描述

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]端口线路。

led

led

3.2、OMR-端口n输出修改寄存器

led

led

3.3、PDR0-端口n驱动程序模式寄存器0

led

4、GPIO 函数

4.1、设置GPIO 状态函数

1void IfxPort_setPinState(Ifx_P *port, uint8 pinIndex, IfxPort_State action)
2{
3    port- >OMR.U = action < < pinIndex;
4}

参数:

port:GPIO 端口号

pinIndex:高低电平

4.2、设置GPIO输出模式

1void IfxPort_setGroupModeOutput(Ifx_P *port, uint8 pinIndex, uint16 mask, IfxPort_OutputMode mode, IfxPort_OutputIdx index)
 2{
 3    uint32 i;
 4    uint32 iocrVal[4];
 5    uint32 iocrMask[4];
 6
 7    IFX_UNUSED_PARAMETER(index == IfxPort_OutputIdx_general);
 8
 9    /* initialise */
10    for (i = 0; i < 4; i++)
11    {
12        iocrVal[i]  = 0;
13        iocrMask[i] = 0;
14    }
15
16    /* calculate IOCRx values and masks */
17    uint32 imask = (uint32)mask < < pinIndex;
18
19    for (i = pinIndex; i < 16; i++)
20    {
21        if ((imask & (1U < < i)) != 0)
22        {
23            uint32 index = i / 4;
24            uint32 shift = (i & 0x3U) * 8;
25            iocrMask[index] |= (0x1FU < < 3) < < shift;
26            iocrVal[index]  |= (mode | index) < < shift;
27        }
28    }
29
30    /* write IOCRx */
31    for (i = 0; i < 4; i++)
32    {
33        if (iocrMask[i] != 0)
34        {
35            __ldmst(&((&(port- >IOCR0.U))[i]), iocrMask[i], iocrVal[i]);
36        }
37    }
38}

2、设置GPIO输出高电平

1void IfxPort_setPinHigh(Ifx_P *port, uint8 pinIndex)
2{
3    IfxPort_setPinState(port, pinIndex, IfxPort_State_high);
4}

port:GPIO端口号

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

3、设置GPIO输出低电平

1void IfxPort_setPinLow(Ifx_P *port, uint8 pinIndex)
2{
3    IfxPort_setPinState(port, pinIndex, IfxPort_State_low);
4}

port:GPIO端口号

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

4、设置GPIO翻转电平

1void IfxPort_togglePin(Ifx_P *port, uint8 pinIndex)
2{
3    IfxPort_setPinState(port, pinIndex, IfxPort_State_toggled);
4}

port:GPIO端口号

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

5、读取GPIO电平

1boolean IfxPort_getPinState(Ifx_P *port, uint8 pinIndex)
2{
3    return (__getbit(&port- >IN.U, pinIndex) != 0) ? TRUE : FALSE;
4}

port:GPIO端口号

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

5、GPIO 测试实验

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

led

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

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

led

5.2、新建工程名:TC377_LED

led

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

led

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

led

5.5、新建工程如下:

led

5.6、在CPU0初始化LED

1#include "Ifx_Types.h"
 2#include "IfxCpu.h"
 3#include "IfxScuWdt.h"
 4#include "Bsp.h"
 5
 6IFX_ALIGN(4) IfxCpu_syncEvent g_cpuSyncEvent = 0;
 7
 8void core0_main(void)
 9{
10    IfxCpu_enableInterrupts();
11
12    /* !!WATCHDOG0 AND SAFETY WATCHDOG ARE DISABLED HERE!!
13     * Enable the watchdogs and service them periodically if it is required
14     */
15    IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());
16    IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());
17
18    //initTime(); /* Calculate iLLDs time constants   */
19    IfxPort_setPinModeOutput(&MODULE_P20,8, IfxPort_OutputMode_pushPull, IfxPort_OutputIdx_general);
20    IfxPort_setPinHigh(&MODULE_P20,8);   //Switch OFF the LED (low-level active)
21
22    /* Wait for CPU sync event */
23    IfxCpu_emitEvent(&g_cpuSyncEvent);
24    IfxCpu_waitEvent(&g_cpuSyncEvent, 1);
25
26    while(1)
27    {
28        IfxPort_togglePin(&MODULE_P20,8);       /* Toggle the state of the LED*/
29        waitTime(500);          /* Wait 500 milliseconds*/
30
31    }
32}

5.7、编译并下载

led

led

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分