使用PSIM软件生成DSP28335流水灯程序

  最近在学习DSP28335芯片,然后在使用PSIM仿真软件时发现这个仿真软件也支持28335芯片,于是就想学习下如何在PSIM软件中使用DSP28335芯片。在PSIM自带的官方示例中有使用DSP28335芯片的相关例子。

工程下载链接 https://download.csdn.net/download/qq_20222919/88770386
在这里插入图片描述
  PSIM仿真的官方示例在安装目录下examples文件夹中,其中28335芯片的相关示例在examples\Code Generation\F2833x Target 文件夹中。我这里PSIM的版本安装的是2022版。

  不过官方的这些例子看起来有些复杂,对于初学者来说,要看懂很不容易。于是想在网上找一个简单一些的入门例子,结果找了一圈也没找到。看来只能靠自己了,经过一番摸索,终于成功点亮了LED灯。

  下面将我的方法分享给大家。
开发板使用的是普中科技的
在这里插入图片描述
想要实现的功能就是让板子上的这几个LED灯闪烁。首先要确定LED灯的端口是哪几个IO口。
直接在开发板原理图中查看LED端口。

在这里插入图片描述
在这里插入图片描述
通过原理图可以看到LED使用的IO口是GPIO64/65/66/67/68,暂时先用这5个LED,最后两个先不用。

确定好IO口之后,下面开始使用PSIM仿真软件搭建仿真电路。新建一个PSIM仿真文件。
在这里插入图片描述
然后在菜单栏选择仿真—仿真控制
在这里插入图片描述
此时会出现一个钟表一样的图标,将这个图标放在仿真文件中。
在这里插入图片描述

双击这个图标,打开仿真设置。

在这里插入图片描述

第一个选项使用默认设置就行,点到第三个选项。
在这里插入图片描述
在SimCoder选项中设置硬件目标,这里设置为F28335。接下来设置时钟频率,菜单栏中选择 元件—SimCoder—F2833x目标—DSP时钟。这个选项在倒数第二个,选择的时候要用鼠标将选项页面一直往下拉才能看见。
在这里插入图片描述
将这个DSP时钟放置在页面上。
在这里插入图片描述
时钟的默认设置是外面晶振30MHz,DSP工作时钟为150MHz,和我的开发板设置一样,所以这里使用默认的就行。
在这里插入图片描述
接下来设置IO口,菜单栏中选择 元件—SimCoder—F2833x目标—硬件结构设置。
在这里插入图片描述
将硬件配置这个图标放在图纸上,然后双击打开。
在这里插入图片描述
这个模块就是配置每个IO口功能的,相当于IO口的初始化。
在这里插入图片描述
这里需要配置的IO口就是 GPIO64/65/66/67/68
在这里插入图片描述
将这个几个口设置为输出口,设置完成之后需要点击右上角的锁定按钮。
在这里插入图片描述
点击锁定之后,配置的IO口才能生效,此时锁定按钮就变成了解锁按钮。如果需要修改IO口,需要先解锁才能修改。

在这里插入图片描述
接下来好需要放置IO口输出模块。菜单栏中选择 元件—SimCoder—F2833x目标—数字输出。
在这里插入图片描述
将数字输出模块放置在界面上,然后双击打开模块,选择每个端口需要输出的IO口。
在这里插入图片描述
将端口D0–D4分别设置为GPIO64–GPIO68
在这里插入图片描述
接下来给IO口设置输出信号,想让LED按照10Hz的频率闪烁,要产生这个10Hz的信号,就需要使用一个方波发生器。
在这里插入图片描述放置一个方波发生器,然后将一端接地,这个方波产生的信号不能直接北28335使用,还需要在方波发生器和IO模块之间接一个 零阶保持器。

菜单栏选择 元件—控制电路—数字控制模块— 零阶保持器
在这里插入图片描述
接下来开始连线,将方波的信号连接到零阶保持器输入端,然后零阶保持器输出端接F28335输出模块的左端。
在这里插入图片描述
然后将D1到D4口都连接到D0口上,让这几个口的信号一样,然后将没有用到的D5—D7接地,

在这里插入图片描述
接下来设置方波发生器的频率,双击方波发生器,将频率设置为10。
在这里插入图片描述
接下来就可以查看波形了,给输入输出信号分别放置电压探头。
在这里插入图片描述
下面点击仿真按钮,开始仿真。
在这里插入图片描述
将输入输出波形都添加进去
在这里插入图片描述
此时的波形中为什么看不到方波?

在这里插入图片描述

由于方波发生器的频率设置的非常低,只有10Hz,而仿真时间设置的比较短,只有10ms,所以看不到波形,将仿真文件中的钟表图标双击打开,将仿真时间修改为1秒。
在这里插入图片描述
接着继续仿真,查看波形。
在这里插入图片描述
这时候就能看到方波了,下面就剩最后一步了,开始生成代码。

保存仿真文件到指定的文件夹中,文件夹命名最好不要带中文,因为一会要通过CCS软件直接打开生成的工程。
在这里插入图片描述
然后再菜单栏点 仿真—生成代码
在这里插入图片描述
代码生成完之后,就会自动切换到生成的代码界面。
在这里插入图片描述
这时候在文件夹中就生成一个工程
在这里插入图片描述
打开这工程的文件夹,可以看到生成的文件。
在这里插入图片描述
下面就可以使用CCS直接打开这个工程了,打开CCS软件

菜单栏中选择 Project — Import Legacy SSCv3.3 Projects 使用3.3版本导入刚才新建的文件

在这里插入图片描述
再打开的界面中点Browse按钮,打开刚才生成工程。
在这里插入图片描述
工程的后缀名为*.pjt
在这里插入图片描述
单击Next
在这里插入图片描述
然后单击Finish

在这里插入图片描述

这时候工程就打开了
在这里插入图片描述
下面还需要对工程进行配置,在工程上右键,选择New—Target Configuration File
在这里插入图片描述
将配置文件名称修改为led

在这里插入图片描述接下来设置仿真器型号和单片机型号,点右边的Save按钮保存。
在这里插入图片描述
下面编译工程

在这里插入图片描述

编译成功通过,最后就是见证奇迹的时刻了。直接点debug按钮,将代码下载到开发板RAM中运行。

在这里插入图片描述
在开发板上可以看到5个LED灯在闪
在这里插入图片描述
在这里插入图片描述
通过示波器查看LED波形
在这里插入图片描述
波形的频率为10Hz,和PSIM仿真软件里面设置的一样。

可以看看通过PSIM生成的代码

/*********************************************************************************
// This code is created by SimCoder Version 2022c0.16 for F2833x Hardware Target
//
// SimCoder is copyright by Powersim Inc., 2009-2021
//
// Date: January 22, 2024 17:31:39
**********************************************************************************/
#include	<math.h>
#include	"PS_bios.h"
typedef float DefaultType;
#define	GetCurTime() PS_GetSysTimer()
#define iif(a, b, c) ((a) ? (b) : (c))
#define	PWM_IN_CHECK	// To lower PWM value setting time, comment out this line if PWM duty cycle values are strictly limited in the range.interrupt void Task();const Uint16 PSD_CpuClock = 150;  // MHz
extern	DefaultType	fGblVin;DefaultType	fGblVin = 0;
interrupt void Task()
{DefaultType	fZOH1, fVSQ1;PS_MaskIntr(M__INT13);{static DefaultType wt = 1.0 - ((-90) / 360.);static DefaultType dwt = 10 * 1.0 / 1000;fVSQ1 = (wt < 0.5) ? ((1) + (0)) : (0);wt += dwt;if (wt >= 1.0)wt -= 1.0;}fZOH1 = fVSQ1;
#ifdef	_DEBUGfGblVin = fZOH1;
#endif(fZOH1 == 0) ? PS_ClearDigitOutBitC((Uint32)1 << (64 - 64)) : PS_SetDigitOutBitC((Uint32)1 << (64 - 64));(fZOH1 == 0) ? PS_ClearDigitOutBitC((Uint32)1 << (65 - 64)) : PS_SetDigitOutBitC((Uint32)1 << (65 - 64));(fZOH1 == 0) ? PS_ClearDigitOutBitC((Uint32)1 << (66 - 64)) : PS_SetDigitOutBitC((Uint32)1 << (66 - 64));(fZOH1 == 0) ? PS_ClearDigitOutBitC((Uint32)1 << (67 - 64)) : PS_SetDigitOutBitC((Uint32)1 << (67 - 64));(fZOH1 == 0) ? PS_ClearDigitOutBitC((Uint32)1 << (68 - 64)) : PS_SetDigitOutBitC((Uint32)1 << (68 - 64));PS_ExitTimer1Intr();
}void Initialize(void)
{PS_SysInit(30, 10);PS_InitTimer(0, 0);// Set initial states for those GPIO/AIO output ports.PS_ClearDigitOutBitC((Uint32)1 << 0);	// Reset GPIO64PS_ClearDigitOutBitC((Uint32)1 << 1);	// Reset GPIO65PS_ClearDigitOutBitC((Uint32)1 << 2);	// Reset GPIO66PS_ClearDigitOutBitC((Uint32)1 << 3);	// Reset GPIO67PS_ClearDigitOutBitC((Uint32)1 << 4);	// Reset GPIO68PS_InitDigitOut(64);PS_InitDigitOut(65);PS_InitDigitOut(66);PS_InitDigitOut(67);PS_InitDigitOut(68);PS_InitTimer(1,150000L);PS_SetTimerIntrVector(1, Task);PS_StartStopPwmClock(2);	// start Timer1
}void main()
{Initialize();PS_EnableIntr();   // Enable Global interrupt INTMPS_EnableDbgm();for (;;) {}
}

通过定时器生成中断,然后再中断中对相应的IO口设置高低电平来控制LED闪烁。可以看出,通过PSIM生成的代码格式,和自己写的代码差别还是挺大的。

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

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

相关文章

图解CART分类树评估器的参数

图解CART分类树评估器的参数

联邦学习:密码学 + 机器学习 + 分布式 实现隐私计算,破解医学界数据孤岛的长期难题

联邦学习&#xff1a;密码学 机器学习 分布式 提出背景&#xff1a;数据不出本地&#xff0c;又能合力干大事联邦学习的问题 分布式机器学习&#xff1a;解决大数据量处理的问题横向联邦学习&#xff1a;解决跨多个数据源学习的问题纵向联邦学习&#xff1a;解决数据分散在多…

(一)SpringBoot3---尚硅谷总结

目录 示例Demo&#xff1a; 1、我们先来创建一个空工程&#xff1a; 2、我们通过Maven来创建一个Module&#xff1a; 3、让此Maven项目继承父项目: 4、导入web开发的场景启动器 5、创建Springboot项目的主入口程序&#xff1a; 6、举例测试&#xff1a; 7、Springboot还能…

020-信息打点-红蓝队自动化项目资产侦察企查产权武器库部署网络空间

020-信息打点-红蓝队自动化项目&资产侦察&企查产权&武器库部署&网络空间 #知识点&#xff1a; 1、工具项目-红蓝队&自动化部署 2、工具项目-自动化侦查收集提取 3、工具项目-综合&网络空间&信息 演示案例&#xff1a; ➢自动化-武器库部署-F8x ➢自…

leetcode—图 岛屿数量

岛屿数量 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以假设该网…

RabbitMQ入门篇【图文并茂,超级详细】

&#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Docker的相关操作吧 目录 &#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 前言 1.什么是MQ 2.理解MQ 3.生活…

记一个奇怪的万能密码

前言 打的站点打多了&#xff0c;什么奇怪的问题都会发生 打点 开局一个登录框 用户枚举到账号爆破 测了一下&#xff0c;没发现admin的弱口令&#xff0c;但是发现存在用户枚举漏洞&#xff0c;因此准备跑一下账号 输入密码为123456 进行账号爆破 成功爆破出账号 是的…

【ARM 嵌入式 编译系列 7.3 -- GCC 链接脚本中 DISCARD 与 .ARM.exidx】

请阅读【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】 文章目录 背景.ARM.exidx方法一:使用链接器脚本方法二:使用链接器选项注意事项背景 在移植 RT-Thread 到 cortex-m33(RA4M2)上的时候,在编译的时候遇到下面问题: Building target: ra4m2.elf arm

PyTorch视觉工具箱:图像变换与上采样技术详解(1)

目录 Pytorch中Vision functions详解 pixel_shuffle 用途 用法 使用技巧 注意事项 参数 数学理论公式 示例代码及输出 pixel_unshuffle 用途 用法 使用技巧 注意事项 参数 数学理论公式 示例代码及输出 pad 用途 用法 使用技巧 注意事项 参数 示例代码…

智能机器人与旋量代数(9)

Chapt 3. 螺旋运动与旋量代数 3.1 螺旋运动 螺旋运动是关于一条空间直线的一个旋转运动&#xff0c;并伴随沿此直线的一个平移。是一种刚体绕空间轴 s s s旋转 θ \theta θ角&#xff0c;再沿该轴平移距离 d d d的复合运动&#xff0c;类似螺母沿螺纹做进给运动的情形。 一…

2024年【焊工(初级)】考试内容及焊工(初级)新版试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 焊工&#xff08;初级&#xff09;考试内容参考答案及焊工&#xff08;初级&#xff09;考试试题解析是安全生产模拟考试一点通题库老师及焊工&#xff08;初级&#xff09;操作证已考过的学员汇总&#xff0c;相对有…

docker 使用 vcs/2018 Verdi等 eda 软件

好不容易在ubuntu 安装好了eda软件&#xff0c;转眼就发现了自己的无知。 有博主几年前就搞定了docker上的EDA工具。而且更全&#xff0c;更简单。只恨自己太无知啊。 Synopsys EDA Tools docker image - EDA资源使用讨论 - EETOP 创芯网论坛 (原名&#xff1a;电子顶级开发网…

python解决从有序数组中寻找中位数

如果给定两个长度分别是m和n的有序数组array1和array2&#xff0c;需要对这两个有序数组找出其中的中位数&#xff0c;需要保证时间复杂度是O(long(min(m,n))&#xff0c;空间复杂度是O(1)。如下例子&#xff1a; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#…

【教程】混淆Dart 代码

什么是代码混淆&#xff1f; 代码混淆是一种将应用程序二进制文件转换为功能上等价&#xff0c;但人类难于阅读和理解的行为。在编译 Dart 代码时&#xff0c;混淆会隐藏函数和类的名称&#xff0c;并用其他符号替代每个符号&#xff0c;从而使攻击者难以进行逆向工程。 Flut…

ChatGPT和文心一言哪个更好用?

目录 一、ChatGPT和文心一言大模型的对比分析 1.1 二者训练的数据情况分析 1.2 训练大模型数据规模和参数对比 1.3 二者3.5版本大模型对比总结 二、ChatGPT和文心一言功能对比分析 2.1 二者产品提供的功能情况分析 2.2 测试一下各种功能的特性 2.2.1 文本创作能力 2.2…

电脑提示“No Boot Device”怎么办?

在Windows 11/10/8/7启动时遇到错误如“No Boot Device Found”和“未找到引导设备硬盘3F0”时&#xff0c;会导致电脑无法正常开机。那么&#xff0c;No Boot Device错误该怎么修复呢&#xff1f;下面我们就来了解一下。 修复 1. 检查启动顺序并将BIOS的设置重置为默认值 为…

非线性最小二乘问题的数值方法 —— 狗腿法 Powell‘s Dog Leg Method (II, Python 简单实例)

Title: 非线性最小二乘问题的数值方法 —— 狗腿法 Powell‘s Dog Leg Method (II, Python 简单实例) 姊妹博文 非线性最小二乘问题的数值方法 —— 狗腿法 Powell‘s Dog Leg Method (I - 原理与算法) 0.前言 本篇博文作为对前述 “非线性最小二乘问题的数值方法 —— 狗腿法…

【mars3d】内置的右键测量菜单单击关闭按钮无法关闭测量结果说明

1.【mars3d】内置的右键测量菜单单击关闭按钮无法关闭测量结果说明 2.内置的右击地图查看此处坐标&#xff0c;出现的弹框按钮同样无法关闭的解决方案。 解决说明&#xff1a; 1.这个问题和mars3d没有关系&#xff0c;是and那边的问题&#xff0c;需要尝试固定下vue版本3.3.0或…

测试 yolov8 分割模型 边缘检测

发现 cfg/default.yaml 参数 mask_ratio 等于4 直接训练如下边缘分割标签,推理时mask 稀疏&#xff0c;训练时分数偏低,mask_ratio 改为1训练时打印的mask 的 P指标一直为0,将imgsz原图size 训练分数也不高 标注用的是labelme多边形 阅读源码发现可能是因为mask缩放导致 且出现…

springboot配置项动态刷新

文章目录 一&#xff0c;序言二&#xff0c;准备工作1. pom.xml引入组件2. 配置文件示例 三&#xff0c;自定义配置项动态刷新编码实现1. 定义自定义配置项对象2. 添加注解实现启动时自动注入3. 实现yml文件监听以及文件变化处理 四&#xff0c;yaml文件转换为java对象1. 无法使…