TC275——04Blinky-LED

news2024/9/20 8:03:28

项目工程框架

项目驱动文件这个见过,三个main文件真的是开了眼,一个main代表一个核吗?

按照以往对实现LED闪烁的流程,一般是先配置时钟、再配置IO、延时,实现反转效果。

Blinky_LED.c

在驱动文件里:

/*********************************************************************************************************************/
/*-----------------------------------------------------Includes------------------------------------------------------*/
/*********************************************************************************************************************/
#include "IfxPort.h"
#include "Bsp.h"

/*********************************************************************************************************************/
/*------------------------------------------------------Macros-------------------------------------------------------*/
/*********************************************************************************************************************/
#define LED         &MODULE_P00,5                                           /* LED: Port, Pin definition            */
#define WAIT_TIME   500                                                     /* Wait time constant in milliseconds   */

/*********************************************************************************************************************/
/*---------------------------------------------Function Implementations----------------------------------------------*/
/*********************************************************************************************************************/
/* This function initializes the port pin which drives the LED */
void initLED(void)
{
    /* Initialization of the LED used in this example */
    IfxPort_setPinModeOutput(LED, IfxPort_OutputMode_pushPull, IfxPort_OutputIdx_general);

    /* Switch OFF the LED (low-level active) */
    IfxPort_setPinHigh(LED);
}

/* This function toggles the port pin and wait 500 milliseconds */
void blinkLED(void)
{
    IfxPort_togglePin(LED);                                                     /* Toggle the state of the LED      */
    waitTime(IfxStm_getTicksFromMilliseconds(BSP_DEFAULT_TIMER, WAIT_TIME));    /* Wait 500 milliseconds            */
}

Bsp.h

这个看名字都可以猜出来,板级支持包。

默认系统定时器 MODULE_STM0 模式:

#ifndef BSP_DEFAULT_TIMER
/** Defined the default timer used */
#define BSP_DEFAULT_TIMER (&MODULE_STM0)
#endif

一些中断函数,使能或者不使能,甚至还可以返回中断的一些状态。

IFX_INLINE boolean areInterruptsEnabled(void);
IFX_INLINE boolean disableInterrupts(void);
IFX_INLINE void    enableInterrupts(void);
IFX_INLINE void    restoreInterrupts(boolean enabled);
IFX_INLINE void    forceDisableInterrupts(void);

还有一些系统定时器函数,非常有意思,有的可以查看你的程序运行了多长时间,有的可以查看程序距离结束还有多久……

/** \addtogroup library_srvsw_sysse_bsp_bsp
 * \{ */
/** \name Time APIs
 * \{ */
IFX_INLINE Ifx_TickTime addTTime(Ifx_TickTime a, Ifx_TickTime b);
IFX_INLINE Ifx_TickTime elapsed(Ifx_TickTime since);
IFX_INLINE Ifx_TickTime getDeadLine(Ifx_TickTime timeout);
IFX_INLINE Ifx_TickTime getTimeout(Ifx_TickTime deadline);
IFX_EXTERN void         initTime(void);
IFX_INLINE boolean      isDeadLine(Ifx_TickTime deadLine);
IFX_INLINE Ifx_TickTime now(void);
IFX_INLINE Ifx_TickTime nowWithoutCriticalSection(void);
IFX_INLINE boolean      poll(volatile boolean *test, Ifx_TickTime timeout);
IFX_INLINE Ifx_TickTime timingNoInterruptEnd(Ifx_TickTime since, boolean interruptEnabled);
IFX_INLINE Ifx_TickTime timingNoInterruptStart(boolean *interruptEnabled);
IFX_INLINE void         wait(Ifx_TickTime timeout);
IFX_EXTERN void         waitPoll(void);
IFX_EXTERN void         waitTime(Ifx_TickTime timeout);

/** Prototype for wait() functions */
typedef void (*WaitTimeFunction)(Ifx_TickTime timeout);

然后就是一些IO口的配置函数

#define PIN_DRIVER_STRONG_SHARP IfxPort_PadDriver_cmosAutomotiveSpeed1
#define Pin_setState(pin, mode)                            IfxPort_setPinState((pin)->port, (pin)->pinIndex, (mode))
#define Pin_setGroupState(pin, mask, data)                 IfxPort_setGroupState((pin)->port, (pin)->pinIndex, (mask), (data))
#define Pin_setMode(pin, mode)                             IfxPort_setPinMode((pin)->port, (pin)->pinIndex, (mode))
#define Pin_setDriver(pin, mode)                           IfxPort_setPinPadDriver((pin)->port, (pin)->pinIndex, (mode))
#define Pin_setStateHigh(pin)                              IfxPort_setPinHigh((pin)->port, (pin)->pinIndex)
#define Pin_setStateLow(pin)                               IfxPort_setPinLow((pin)->port, (pin)->pinIndex)
#define Pin_getState(pin)                                  IfxPort_getPinState((pin)->port, (pin)->pinIndex)
#define Pin_setGroupModeOutput(pin, mask, mode, outputIdx) IfxPort_setGroupModeOutput((pin)->port, (pin)->pinIndex, (mask), (mode), (outputIdx))
#define Pin_setGroupModeInput(pin, mask, mode)             IfxPort_setGroupModeInput((pin)->port, (pin)->pinIndex, (mask), (mode))
#define Pin_setGroupState(pin, mask, data)                 IfxPort_setGroupState((pin)->port, (pin)->pinIndex, (mask), (data))
#define Pin_getGroupState(pin, mask)                       IfxPort_getGroupState((pin)->port, (pin)->pinIndex, (mask))
#define Pin_enableEmgStop(pin)                             IfxPort_enableEmergencyStop((pin)->port, (pin)->pinIndex)

IfxPort.h

这个也是,看名字就可以大致猜出来,Port端口,关于端口的一些结构体参数、功能定义什么的。

如:

输入模式:

/** \brief Ifx_P output modification modes definition.
 */
typedef enum
{
    IfxPort_InputMode_undefined    = -1,//不定义
    IfxPort_InputMode_noPullDevice = 0 << 3,//?
        IfxPort_InputMode_pullDown = 1U << 3,//下拉
        IfxPort_InputMode_pullUp   = 2U << 3  //上拉 /**< \brief  */
} IfxPort_InputMode;

输出模式:

/** \brief Pin output mode definition
 */
typedef enum
{
    IfxPort_OutputMode_pushPull      = 0x10U << 3,
        IfxPort_OutputMode_openDrain = 0x18U << 3,
        IfxPort_OutputMode_none      = 0
} IfxPort_OutputMode;

初始化的:

/** \addtogroup IfxLld_Port_Std_DataStructures
 * \{ */
/** \brief Defines a pin
 */
typedef struct
{
    Ifx_P *port;
    uint8  pinIndex;
} IfxPort_Pin;

/** \brief To configure pins
 */
typedef struct
{
    Ifx_P            *port;
    uint8             pinIndex;
    IfxPort_OutputIdx mode;
    IfxPort_PadDriver padDriver;
} IfxPort_Pin_Config;

等等……

还有各种函数,非常细,具体的可以去查看这个头文件。

Cpu0_Main.c

*********************************************************************************************************************/
 /*\title Blinky LED
 * \abstract An LED is blinking based on the timing given by a wait function.
 * \description A wait function is used to add delays between switching on and switching off an LED
 *              on port pin P00.5.
 *
 * \name Blinky_LED_1_KIT_TC275_LK
 * \version V1.0.2
 * \board AURIX TC275 lite Kit, KIT_AURIX_TC275_LITE, TC27xTP_D-Step
 * \keywords AURIX, Blinky_LED_1, Blinky, LED, Lite
 * \documents https://www.infineon.com/aurix-expert-training/Infineon-AURIX_Blinky_LED_1_KIT_TC275_LK-TR-v01_00_02-EN.pdf
 * \documents https://www.infineon.com/aurix-expert-training/TC27D_iLLD_UM_1_0_1_12_0.chm
 * \lastUpdated 2021-06-29
 *********************************************************************************************************************/
#include "Ifx_Types.h"
#include "IfxCpu.h"
#include "IfxScuWdt.h"
#include "Blinky_LED.h"

IfxCpu_syncEvent g_cpuSyncEvent = 0;//用于事件同步

int 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());
    
    /* Wait for CPU sync event 等待CPU进行事件同步*/
    IfxCpu_emitEvent(&g_cpuSyncEvent);		//CPU发起事件
    IfxCpu_waitEvent(&g_cpuSyncEvent, 1);	//等待事件
    
    initLED();  /* Initialize the LED port pin      */

    while(1)
    {
        blinkLED(); /* Make the LED blink           */
    }
    return (1);//返回1,也是我没想到的
}

IfxCpu.h

CPU基本功能

如:

CPU状态模式

/** \addtogroup IfxLld_Cpu_Std_Enum
 * \{ */
/** \brief Enumeration for the Cpu mode
 */
typedef enum
{
    IfxCpu_CoreMode_halt,//挂起
    IfxCpu_CoreMode_run,//运行
    IfxCpu_CoreMode_idle,//待机
    IfxCpu_CoreMode_sleep,//睡眠
    IfxCpu_CoreMode_stby,//?
    IfxCpu_CoreMode_unknown//未知
} IfxCpu_CoreMode;

先去看看手册,有些功能不是很懂

测试

编译和烧录

LED闪烁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/135286.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据分析 -Hive学习 Day5

HIVE 核心技能之窗口函数 大家好呀&#xff0c;这节课我们学习 Hive 核心技能中最难的部分——窗口函数。窗口函数我们之前在学 MySQL 的时候有学过一些&#xff0c;但是只学了三个排序的窗口函数。这节课我们会学习更多的窗口函数&#xff0c;包括累计计算、分区排序、切片排…

nvm中node包管理器在windows中的使用

你要使用的 1/nuvm 只能在Linux 和 OS X 2/推荐使用nvm-windows&#xff0c;git上&#xff0c;我认为还可以就使用 操作 1/下载的git地址nvm-windows 2/好像要清除掉所有node&#xff0c;是个注意点 3/安装 4/路径上不允许存在空格&#xff0c;否则后面会各种报错 5…

读书笔记《硬件十万个为什么——开发流程篇》

大家好,这里是大话硬件。 今天想给大家分享上周末在家写的读书笔记,内容来源于重读《硬件十万个为什么——开发流程篇》这本书的一些启发和总结。 1. 为什么我要重读这本书籍? 这本书收到快递的时间是2022.8.26,拆开快递的那个晚上大约花了2个小时从头到尾快速浏览了一次…

(创建失败)小米万兆路由器里的Docker安装Redis7.0

小米2022年12月份发布了万兆路由器&#xff0c;里面可以使用Docker。 今天尝试在小米的万兆路由器里安装Redis7.0。 创建失败&#xff0c;有时间时确认是否可以解决。 Server cant set maximum open files to 10032 because of OS error: Operation not permitted. Current m…

【STM32 Cortex-M4核中断实验】

STM32 Cortex-M4核中断实验实验要求MX相关设置LED设置按键设置光电开关&#xff0c;火焰传感器&#xff0c;人体红外设置UART4设置代码编写结果测试实验要求 使用M4核开发 PF7/PF8/PF9/PF5/PF12/PE15检测中断 要求1&#xff1a;当中断到来时&#xff0c;LED灯状态取反 要求2&a…

EpilepsyGAN:具有隐私保护的合成癫痫脑活动-2021(同26)

EpilepsyGAN: Synthetic Epileptic Brain Activities with Privacy Preservation Abstract 癫痫是一种慢性神经系统疾病&#xff0c;影响全世界6500多万人&#xff0c;表现为反复发作的无端癫痫发作。癫痫发作的不可预测性不仅会降低患者的生活质量&#xff0c;而且还可能危及…

【前端领域】一个好玩好看的罗盘时钟 --- 附详细介绍

唯有热爱&#xff0c;可抵岁月漫长&#xff0c;唯有热爱&#xff0c;不畏世间无常&#xff01; 少年不曾迷茫&#xff0c;展翅飞往神域&#xff0c;坚定初心&#xff0c;踏实行动。 新的一年&#xff0c;收下少年的祝福&#xff0c;一起踏上新道路。 &#x1f4aa;(ง •_•)…

Spring Boot 日志文件

1.日志有什么用&#xff1f; ⽇志是程序的重要组成部分&#xff0c;想象⼀下&#xff0c;如果程序报错了&#xff0c;不让你打开控制台看⽇志&#xff0c;那么你能找到报错的原因吗&#xff1f;答案是否定的&#xff0c;写程序不是买彩票&#xff0c;不能完全靠猜&#xff0c;…

Blender 非线性编辑器

文章目录非线性编辑器介绍动画摄影表/动作编辑器与非线性编辑器NAL非线性编辑器基本操作复制动画片段混合动画片段动画片段N键菜单活动片段栏回放剪辑栏非线性编辑器介绍 1 非线性编辑器是动画制作的一部分&#xff0c;类似于PR的轨道&#xff0c;可以合并多个不同的动画动作 …

【回答问题】ChatGPT上线了!推荐30个以上比较好的构建知识图谱源码

在此列出30个比较好的构建知识图谱的源码&#xff1a; Neo4j AgensGraph JanusGraph AnzoGraph Cayley GraphDB ArangoDB FlockDB OrientDB Redis Graph Virtuoso TigerGraph HyperGraphDB Titan Stardog GraphQL GRAKN.AI AllegroGraph Blazegraph Google Cloud Bigtable Apa…

10四个基本子空间

四个基本子空间 四个基本空间介绍 对于一个 m*n 矩阵 A 来说&#xff0c;以下四个基本空间是其基础。 2.1 四个基本空间的维数与基 还是研究 m*n 的矩阵 A&#xff0c;其四个子空间的基本性质如下: &#xff08;1&#xff09;列空间 之前介绍过列空间的基&#xff0c;设矩…

Go语言 值传递 引用传递 修改集合中的值

分类看一下Go的值传递和引用传递&#xff1a; 值传递&#xff1a;将值传递给函数 /* 引入单测包 */ import ("testing" )func TestSwap(t *testing.T) {x : 100y : 200swap(x, y)println("x:", x)println("y:", y) }/* 定义相互交换值的函数 *…

自己编译docker镜像

有时候官方现在的docker镜像并不能很好地符合自己的需求&#xff0c;我们需要自己定制。以下我主要是在官方mariadb:latest镜像的基础上&#xff0c;做一些定制化的操作如修改容器的编码格式。 /root/.pip目录下有两个文件&#xff1a; Dockerfile的文件内容如下&#xff1a;…

性能优化系列之你是否清楚浏览器的渲染过程?

文章の目录1、浏览器解析 HTML&#xff0c;生成 DOM Tree&#xff08;Parse HTML&#xff09;。2、浏览器解析 CSS&#xff0c;生成 CSSOM&#xff08;CSS Object Model&#xff09; Tree。3、JavaScript 会通过 DOM API 和 CSSOM API 来操作 DOM Tree 和 CSS Rule Tree&#x…

Docker安装Kibana整合Elasticsearch[包含账号密码设置]

文章目录一&#xff1a;拉取Es和Kibana镜像二&#xff1a;创建Es挂载目录2.1&#xff1a;挂载相关配置2.2&#xff1a;开放文件权限&#xff0c;否则后面运行容器会报错三&#xff1a;运行Es容器3.1: 运行参数说明3.2: 运行容器命令3.3: 开放防火墙四&#xff1a;运行Kibana容器…

十四、Kubernetes中pod配置详解、实例

1、概述 在kubernetes中基本所有资源的一级属性都是一样的&#xff0c;主要包含5部分&#xff1a; apiVersion <string> 版本&#xff0c;由kubernetes内部定义&#xff0c;版本号必须可以用 kubectl api-versions 查询到 kind <string> 类型&#xff0c;由kuber…

我辛辛苦苦做了一个月的项目,组长年底用来写了晋升PPT

最近有朋友跟我吐槽&#xff0c;9月10月辛辛苦苦做了一个多月的项目&#xff0c;是一个重点项目&#xff0c;自己还是开发主力&#xff0c;但年底组长用来写了晋升PPT&#xff0c;汇报的时候还写的可圈可点&#xff0c;完全就是他做的样子。 目录 1、我也曾盼望升职加薪 2、结…

【阶段二】Python数据分析NumPy工具使用03篇:数组的预处理、数组形状更改、数组转置与数组合并

本篇的思维导图: 数组的预处理 数据的类型转换 代码 结果 import numpy as

网站收录查询,常用的2种网站收录查询方法

在网站优化过程中&#xff0c;SEO人员通常都会非常关心网站的收录、索引情况&#xff0c;因为网站建立索引之后&#xff0c;才具有排名的条件。如何查询网站收录情况&#xff1f;今天我们聊聊常用的2种网站收录查询方法。第一种方法&#xff1a;通过site指令在搜索框查询 众多S…

【Python】sklearn机器学习之Meanshift聚类算法

文章目录基本原理sklearn调用基本原理 凡聚类者&#xff0c;必有中心。按照这个思路&#xff0c;如果某个区域满足聚类的要求&#xff0c;那么其自然中心与样本均值应该是几乎重合的&#xff0c;这也是MeanShift算法的基本逻辑。 假设现有100个点&#xff0c;然后随机选择1个…