使用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	_DEBUG
	fGblVin = 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 GPIO64
	PS_ClearDigitOutBitC((Uint32)1 << 1);	// Reset GPIO65
	PS_ClearDigitOutBitC((Uint32)1 << 2);	// Reset GPIO66
	PS_ClearDigitOutBitC((Uint32)1 << 3);	// Reset GPIO67
	PS_ClearDigitOutBitC((Uint32)1 << 4);	// Reset GPIO68
	PS_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 INTM
	PS_EnableDbgm();
	for (;;) {
	}
}


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mockjs使用(2)

mockjs使用&#xff08;1&#xff09; 4、Mock 4.1 Mock.mock() 根据数据模版生成模拟数据 Mock.mock( rurl?, rtype?, template|function(options) )问号代表该参数不必填 4.1.1 各参数及其默认值 rurl: 不必填。表示需要拦截的URL&#xff0c;可以使URL字符串或URL正…

QT quick基础:组件Canvas

参考《QT quick 核心编程》 使用qml画图。以下面的代码段为例&#xff0c;记录画图方法。 一、基本用法 Canvas {// 画布id:canvas;width: parent.width; // 画布宽度height: parent.height;// 画布高度onPaint: {var ctx canvas.getContext("2d"); // 使用画布类…

Scala基础知识

scala 1、scala简介 ​ scala是运行在JVM上的多范式编程语言&#xff0c;同时支持面向对象和面向函数式编程。 2、scala解释器 要启动scala解释器&#xff0c;只需要以下几步&#xff1a; 按住windows键 r输入scala即可 在scala命令提示窗口中执行:quit&#xff0c;即可退…

深度学习笔记(九)——tf模型导出保存、模型加载、常用模型导出tflite、权重量化、模型部署

文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解&#xff0c;如有遗漏或错误&#xff0c;欢迎评论或私信指正。 本篇博客主要是工具性介绍&#xff0c;可能由于软件版本问题导致的部分内容无法使用。 首先介绍tflite: TensorFlow Lite 是一组工具&#xff0c;可帮助开…

Java21 + SpringBoot3集成easy-captcha实现验证码显示和登录校验

文章目录 前言相关技术简介easy-captcha 实现步骤引入maven依赖定义实体类定义登录服务类定义登录控制器前端登录页面实现测试和验证 总结附录使用Session缓存验证码前端登录页面实现代码 前言 近日心血来潮想做一个开源项目&#xff0c;目标是做一款可以适配多端、功能完备的…

Android.mk和Android.bp的区别和转换详解

Android.mk和Android.bp的区别和转换详解 文章目录 Android.mk和Android.bp的区别和转换详解一、前言二、Android.mk和Android.bp的联系三、Android.mk和Android.bp的区别1、语法&#xff1a;2、灵活性&#xff1a;3、版本兼容性&#xff1a;4、向后兼容性&#xff1a;5、编译区…

鸿蒙开发笔记(二十三):图形展示 Image,Shape,Canvas

1. Image 在应用中显示图片需要使用Image组件实现&#xff0c;Image支持多种图片格式&#xff0c;包括png、jpg、bmp、svg和gif&#xff0c;具体用法请参考Image组件。 Image通过调用接口来创建&#xff0c;接口调用形式如下&#xff1a; Image(src: string | Resource | me…

力扣第92题——反转链表 II(C语言题解)

题目描述 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4 输出&#xff1…

精品基于Uniapp+springboot智慧农业环境监测App

《[含文档PPT源码等]精品基于Uniappspringboot智慧农业环境监测App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;springboot、ssm …

Android双指缩放ScaleGestureDetector检测放大因子大图移动到双指中心点ImageView区域中心,Kotlin

Android双指缩放ScaleGestureDetector检测放大因子大图移动到双指中心点ImageView区域中心&#xff0c;Kotlin 在 Android双击图片放大移动图中双击点到ImageView区域中心&#xff0c;Kotlin-CSDN博客 基础上&#xff0c;这次使用ScaleGestureDetector检测两根手指的缩放动作&a…

一起玩儿物联网人工智能小车(ESP32)——44. 利用红外测距模块GP2Y0E03实现避障小车

摘要&#xff1a;本文介绍使用红外测距模块GP2Y0E03实现避障小车 在前边已经介绍了两种非接触测距的办法&#xff0c;分别是超声波测距和激光测距&#xff0c;在这里&#xff0c;再介绍另一种常用的测距传感器——红外测距传感器。红外测距的工作原理是&#xff0c;利用红外信号…

HuoCMS|免费开源可商用CMS建站系统HuoCMS 2.0下载(thinkphp内核)

HuoCMS是一套基于ThinkPhp6.0Vue 开发的一套HuoCMS建站系统。 HuoCMS是一套内容管理系统同时也是一套企业官网建设系统&#xff0c;能够帮过用户快速搭建自己的网站。可以满足企业站&#xff0c;外贸站&#xff0c;个人博客等一系列的建站需求。HuoCMS的优势: 可以使用统一后台…

数学建模--Radar图绘制

1.Radar图简介 最近在数学建模中碰见需要绘制Radar图(雷达图)的情况来具体分析样本的各个特征之间的得分与优劣关系&#xff0c;这样的情况比较符合雷达图的使用场景&#xff0c;一般来说&#xff0c;雷达图适用于展示多个维度的数据&#xff0c;并在一个平面上直观地呈现出不同…

前端每日一练 “文字穿透效果”

前言 我都不知道用什么样的词来描述这个效果&#xff0c;反正你看吧&#xff01;这个效果看上去很简单&#xff0c;但是一旦实现起来你会发现也不复杂&#xff0c;废话不多说直接上源码&#xff0c;喜欢的点个关注、留个免费的 html源码 <!DOCTYPE html> <html>&…

13.8.1异步、异步、异步 Page720~721

#include <iostream> #include <thread> #include <future>using namespace std;///定时炸弹第一波 void sync_sleep(int s) {cout << "sync_sleep----不使用异步" << endl;///启动定时this_thread::sleep_for(chrono::seconds(s)); /…

《WebKit 技术内幕》学习之十(2): 插件与JavaScript扩展

2 Chromium PPAPI插件 2.1 原理 插件其实是一种统称&#xff0c;表示一些动态库&#xff0c;这些动态库根据定义的一些标准接口可以跟浏览器进行交互&#xff0c;至于这个标准接口是什么都可以&#xff0c;重要的是大家都遵循它们&#xff0c;NPAPI接口标准只是其中的一种&a…

FastDFS分布式文件存储

为什么会有分布式文件系统&#xff1f; 分布式文件系统是面对互联网的需求而产生。因为互联网时代要对海量数据进行存储。很显然靠简单的增加硬盘个数已经满足不了我们的要求。因为硬盘传输速度有限但是数据在急剧增长&#xff0c;另外我们还要要做好数据备份、数据安全等。采用…

初识k8s(概述、原理、安装)

文章目录 概述由来主要功能 K8S架构架构图组件说明ClusterMasterNodekubectl 组件处理流程 K8S概念组成PodPod控制器ReplicationController&#xff08;副本控制器&#xff09;ReplicaSet &#xff08;副本集&#xff09;DeploymentStatefulSet &#xff08;有状态副本集&#…

6 时间序列(不同位置的装置如何建模): GRU+Embedding

很多算法比赛经常会遇到不同的物体产生同含义的时间序列信息&#xff0c;比如不同位置的时间序列信息&#xff0c;风力发电、充电桩用电。经常会遇到该如此场景&#xff0c;对所有数据做统一处理喂给模型&#xff0c;模型很难学到区分信息&#xff0c;因此设计如果对不同位置的…

【Linux】常见指令(一)

前言: Linux有许多的指令&#xff0c;通过学习这些指令&#xff0c;可以对目录及文件进行操作。 文章目录 一、基础指令1. ls—列出目录内容2. pwd—显示当前目录3. cd—切换目录重新认识指令4. touch—创建文件等5. mkdir—创建目录6. rmdir指令 && rm 指令7. man—显…