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 }1516 /* calculate iocrx values and masks */17 uint32 imask = (uint32)mask < < pinindex;1819 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 }2930 /* write iocrx */31 for (i = 0; i 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初始化led1#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();1112 /* !!watchdog0 and safety watchdog are disabled here!!13 * enable the watchdogs and service them periodically if it is required14 */15 ifxscuwdt_disablecpuwatchdog(ifxscuwdt_getcpuwatchdogpassword());16 ifxscuwdt_disablesafetywatchdog(ifxscuwdt_getsafetywatchdogpassword());1718 //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)2122 /* wait for cpu sync event */23 ifxcpu_emitevent(&g_cpusyncevent);24 ifxcpu_waitevent(&g_cpusyncevent, 1);2526 while(1)27 {28 ifxport_togglepin(&module_p20,8); /* toggle the state of the led*/29 waittime(500); /* wait 500 milliseconds*/3031 }32}5.7、编译并下载
PLC远程上下载程序和远程编程调试的操作步骤
Wi-Fi7终于要正式落地了!Wi-Fi7上游供应链概况
digilentmyParts Kit晶体管介绍
如何在Xilinx FPGA上快速实现JESD204B?操作步骤详细说明
可监视电压的1节可充电锂电池保护电路
英飞凌TC3XX系列多核MCU学习笔记(1)
无线LED信息发布技术应用实例
简易模式:智能时代,别落下爸妈
阿尔泰科技—展会回顾|第23届中国国际工业博览会圆满闭幕,未来我们携手并进,再踏新征程!
导热硅胶片厚度对电子产品的散热影响有多大?
芯和半导体参加三星Foundry SAFE论坛线上活动
碱性电池和碳性电池哪个污染严重?
AI对于事物的判断都是来源于自身对于大量数据的模型训练?
缓存的基本原理 缓存的分类
一文知道UFS3.0与UFS3.1的区别
URAM和BRAM有哪些区别
无线网络的改进将推动物联网设备
以一个Embedded Studio例程来介绍如何将RTT支持包添加到项目中
基于JPEG2000标准的感兴趣区域编码
腾讯医典通过API的方式将内容接入智能手机场景中?