全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > LED照明 >

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

时间:2023-09-19 09:54

人气:

作者:admin

标签: 英飞凌  mcu  Le  GPIO  寄存器 

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

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

图片

图片

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

图片

图片

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

图片

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,原理图如下:

图片

实验:实现点灯,熟悉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

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、编译并下载

图片

图片

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信