1. GPIO

GPxMUX(功能选择寄存器),

GPxMUX.bit=0配置为I/O功能。GPxMUX.bit=1配置为外设功能。复位时所有GPIO配置为I/O功能。

GPxDIR(方向选择寄存器),0为输入,1为输出,复位时都为输入。

GPxDAT(数据寄存器),

如果GPxDAT.bit=0,且设置为输出功能,置相应的引脚为低电平;

如果GPxDAT.bit= 1,且设置为输出功能,置相应的引脚为高电平。

GPxSET(设置寄存器),是只写寄存器,任何读操作都返回0。

如果GPxSET.bit=0,没有影响;

如果GPxSET.bit=1,且引脚设置为输出,将相应的引脚置成高电平。

GPxCLEAR(清除寄存器),是只写寄存器,任何读操作都返回0

     如果GPxCLEAR.bit=0,没有影响;

如果GPxCLEAR.bit=1,且引脚设置为输出,将相应的引脚置成低电平。

GPxTOGGLE(取反寄存器),是只写寄存器,任何读操作都返回0。

      如果GPxTOGGLE.bit=0,没有影响;

如果GPxTOGGLE.bit=1,且引脚设置为输出,将相应的引脚取反,原来是低电平变成高电平,原来是高电平,变为低电平。

2. 矩阵键盘

矩阵键盘扫描原理:GPIO48-50这三根线为行线,配置为输出口。GPIO51-53这三根线为列线,配置为输入口,用于检测端口电平。先让GPIO48输出低电平,且49,50输出高电平。检测GPIO51、52、53的电平,看哪一个是低电平,则说明相应按键按下。比如此时GPIO52为低电平,则说明SW7按键按下了。同理,再让49为低,且48,50为高;再50为低,48,49为高。这样就实现了按键扫描。

3.  SPI控制数码管显示

SPI接口是高速同步串行输入输出接口。F28335有一个专门的SPI模块, 另外两个McBSP也可以配置为SPI接口。SPI由12组控制寄存器控制,位于控制寄存器帧0x7040h开始的位置。所有的寄存器都为16bit寄存器。

数码管控制原理:GPIO58-61这四个管脚控制数码管的位码,当他们为高电平的时候,三极管9013导通,此时相应位的数码管点亮。芯片74HC164为串口转并口芯片,A、B为串行数据输入口,A、B是“与”的关系,这里他们连在一起,也就是说当GPIO54为“1”时,输入与后为1,反之,当GPIO54为“0”时,输入“与”后为0。CP是时钟信号输入。当MR为高电平,且在CP的上升沿期间,GPIO54口的数据进行一位位的转换,第一位放在Q0,当第二位过来后,原来的Q0放到Q1,现在的数据又放在Q0,以此类推循环8次,当一次转换结束后,8位数据经过并口输出到数码管,就实现了“串转并”。

4.  SPI

SPI即(Serial Peripheral Interface)是高速同步串行输入输出接口,,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,四线制:SPISOMI(主输入/从输出引脚)、SPISIMO(主输出/从输入引脚)、SPISTE|(从片选)、SPICLK(时钟引脚)。SPI接口数据传输时一共有3种模式:简单模式、基本模式、增强FIFO模式。SPI接口要配置的寄存器有12个:SPI配置控制寄存器(SPICCR)、SPI操作控制寄存器(SPICTL)、SPI状态寄存器(SPISTS)、SPI波特率设置寄存器(SPIBRR)、SPI仿真缓冲寄存器(SPIRXEMU)、SPI串行接收缓冲寄存器(SPIRXBUF)、SPI串行发送缓冲寄存器(SPITXBUF)、SPI串行数据寄存器(SPIDAT)、SPI FIFO发送寄存器SPIFFTX、SPI FIFO接收寄存器SPIFFRX、SPI FIFO控制寄存器SPIFFCT、SPI优先级控制寄存器(SPIPRI)。每个寄存器每一位的如何配置见书《手把手教你学DSP》353页。

系统在上电复位时,SPI工作在标准SPI模式,禁止FIFO功能。FIFO的寄存器SPIFFTX、SPIFFRX、SPIFFCT不起作用。通过将SPIFFTX寄存器中的SPIFFEN的位置1,使能FIFO模式。SPIRST能在操作的任一阶段复位FIFO模式。

5. 28BYJ-48步进电机

28BYJ-48步进电机(四相五线八拍电机):步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到 一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。你可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。这里使用减速的步进电机,减速比为1:64,步进角为5.625/64度。如果需要转动一圈,那么需要360/5.625*64=4096个脉冲信号。步进电机具有瞬间启动、急速停止的优越特性,改变脉冲的顺序,就可以改变转动的方向。

工作原理:图中的三极管SS8050相当于一个反相器,J39接口接步进电机,如果步进电机的第4脚需要输入低电平,此时让控制信号EPWM2A为高电平,则三极管Q12导通,步进电机第四脚就得到低电平。给它低电平,步进电机就高电平。

明白几个概念:

步距角:表示控制系统每发一个步进脉冲信号,电机所转动的角度。真正的步距角和驱动器有关。

相数:产生不同对极N、S磁场的激磁线圈对数。常用m表示。

拍数:完成一个磁场周期性变化所需脉冲数或导电状态用n表示,或指电机转过一个齿距角所需脉冲数,以四相电机为例,有四相四拍运行方式即AB-BC-CD-DA-AB,四相八拍运行方式即 A-AB-B-BC-C-CD-D-DA-A

保持转矩:是指步进电机通电但没有转动时,定子锁住转子的力矩。

6. 中断系统(外部中断)

F28335内部有16个中断线,包括2个不可屏蔽中断(RESET和NMI)+14个可屏蔽中断。【可屏蔽中断:可根据实际情况来设置优先级来决定要不要响应此类中断。不可屏蔽中断:只要接到中断请求,就要做出中断处理】在这14个可屏蔽中断中,其中定时器1与定时器2产生的中断请求通过INT13、INT14中断线到达CPU,这两个中断已经预留给了实时操作系统,因此就剩下12个可屏蔽中断。简单来说就是PIE(外设中断扩展模块)通过12根线与28335核的12个中断线相连。而PIE的另外一侧有12*8根线分别连接到外设,如AD、SPI、EXINT等等。这样PIE共管理12*8=96个外部中断。

中断系统各个寄存器的功用:

PIE控制寄存器(PIECTRL):PIECTRL的0位是PIE向量表使能位,0:禁止PIE模块,1:除复位之外的所有中断向量取自PIE向量表,复位向量始终取自boot  ROM。1-15位是PIE中断向量。

PIE中断应答寄存器(PIEACK):PIE中断响应标志位。

PIE中断标志寄存器(PIEIFRx):(激活or清除中断)操作PIEIFRx(x=1~12)的低8位,表示相应的中断是否被激活,当一个中断被激活时,相应的寄存器为置“1”,当中断响应后或向这些寄存器写0时,对应的寄存器位被清零。可以通过读取该值来确定哪个中断有效或被挂起,访问该寄存器时,硬件比CPU有更高的优先级。

PIE中断使能寄存器(PIEIERx):(确定大组下的小组)PIEIERx(x=1~12,这个x

指大组)中的低8位确定该中断是这一组的第几个中断,位“1”为使能。位“0”

为禁止。

CPU中断标志寄存器(IFR):(激活or清除中断)用于标志和清除被执行的中断,具体配置见书113页。

CPU中断使能寄存器(IER):(确定大组)确定每个中断到底属于哪一组大中断,

就是12组里面的哪一组,位“1”为使能,位“0”为禁止。

CPU调试中断使能寄存器(DBGIER):CPU在实时仿真模式下暂停中需要中断的时候就要用到CPU调试中断使能寄存器。

外部中断控制寄存器(XINTnCR):

外部NMI中断控制寄存器(XNMICR):

外部中断x计数器(XINTxCTR):

总的来说,CPU的所有中断寄存器控制12组的中断,PIE的所有中断寄存器控制每组内8个的中断。除此之外,我们用到哪一个外部中断,相应的还有外部中断的寄存器,DSP的GPIO口都可以配置为外部中断口,需要注意的就是外部中断的标志要自己通过软件来清零。而PIE和CPU的中断标志寄存器由硬件来清零。

外部中断程序例程里,将GPIO48配置为0,GPIO51、52则为外部中断,GPIO51为外部中断3,GPIO52为外部中断4。程序现象:首先将Xint3count(中断3发生中断的次数计数器)和Xint4count(中断4发生中断的次数计数器)还有总中断发生次数计数器Loopcount添加到观察窗口中,依次按下SW4和SW7,每次按下按键时中断计算器加1。

GPIOXINT3SEL寄存器配置见此图

GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL = 19;   // Xint3 is GPIO51

由上图可得,32+19=51,所以=19就表示外部中断3从GPIO51输入。

7. 定时器

TMS320F28335的CPU Time有三个,分别为Timer0,Timer1,Timer2,其中Timer2是为操作系统DSP/BIOS保留的,当未移植操作系统时,可用来做普通的定时器。这三个定时器的中断信号分别为TINT0, TINT1, TINT2,分别对应于中断向量INT1,INT13,INT14。

对程序中几句代码的理解:

CpuTimer0Regs.TCR.all = 0x4001; //启动定时器。

//4001中4是TIE位,代表中断使能,该位置1时若计数器减到0,则中断生效。再有Tss写为0,开启定时器。这个1毫无意义,如果写成4000是一样的。

IER |= M_INT1;             //开中断1的意思。

//“|=”是赋值位运算符号,意思就是IER= IER||M_INT1 IER赋值为IER和M_INT1位或,类似的还有 &= ^=。

PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;//清ACK中断,使得同组的其他中断能响应。

      #if的使用说明

#if的后面接的是表达式,如果表达式为1,则编译#if下面的代码

#if (MAX==10)||(MAX==20)

code...

#endif

它的作用是:如果(MAX==10)||(MAX==20)成立,那么编译器就会把其中的#if 与 #endif之间的代码编译进去(注意:是编译进去,不是执行!!)

8. 外部接口XINTF操作SRAM

SRAM(Static Random Access Memory),即静态随机存取存储器,掉电不能保存数据。SRAM具有较高的性能,功耗较小,但是SRAM也有它的缺点,即它的集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积。

外部接口XINTF采用非复用异步总线,可用于扩展SRAM、FLASH、ADC、DAC模块等。扩展SRAM时,对应于DSP的映射存储区域是ZONE0、ZONE6、ZONE7。读写过程包括:LEAD(引导)-------ACTIVE(使能)-------TRAIL(拖尾)三部分,每个区域可以配置单独的读写访问等待周期。通过XTIMING寄存器可以配置以上信息。每个区域有专用的片选信号,可以连接各种外部存储器。读写访问时刻基于内部的XTIMCLK时钟,因此配置XINTF时,需要配置XTIMCLK与系统时钟SYSCLKOUT的关系,通过XINTF-CN2寄存器中的XTIMCLK控制位可将XTIMCLK时钟频率设定为与SYSCLKOUT时钟频率相同或为其一半,默认情况为其一半。所有的XINTF的操作都由XCLKOUT的上升沿开始。

下图为外扩的SRAM存储器,XRDn为读控制信号,XWEn为写控制信号,XZCS7n为片选信号。数据线为16位,地址线为19根,

程序解读:

#pragma CODE_SECTION(cpu_timer0_isr,"xintffuncs");

//SECTION关键字把中断服务程序放到"xintffuncs"段中去,也就是中断服务程序最终是在外部接口映射区域ZONE7中执行

SECTION关键字在.CMD文件里,并申明四个全局变量,指定运行首地址,装载长度。

MemCopy(&XintffuncsLoadStart, &XintffuncsLoadEnd,

&XintffuncsRunStart);

//把原地址代码复制到目的地址,也就是把外部中断代码复制到ZONE7区域

asm(" RPT #7 || NOP");

//会执行N+1次NOP指令,占用N+1个指令周期,也就是执行8次NOP指令

void init_zone7(void) // DSP的映射存储区域ZONE7配置

{

EALLOW;

SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;//开启XINTF时钟信号

EDIS;

InitXintf16Gpio();//初始化外部SRAM的地址线,数据线,片选线

EALLOW;

// All Zones---------------P书82------------------

XintfRegs.XINTCNF2.bit.XTIMCLK = 0;//基准时钟

XTIMCLK=SYSCLKOUT

XintfRegs.XINTCNF2.bit.WRBUFF = 3;//有三个写缓冲器

XintfRegs.XINTCNF2.bit.CLKOFF = 0;//使能XCLKOUT

XintfRegs.XINTCNF2.bit.CLKMODE = 0;//XCLKOUT=XTIMCLK

XintfRegs.XTIMING7.bit.XWRLEAD = 1;//XTIMING7:XINTF区域7的时序寄存器,写访问的建立时间中等待周期个数设定位,区域7写建立时间1b,周期为1x1=1,因为X2TIMING=0

XintfRegs.XTIMING7.bit.XWRACTIVE = 2;//写访问有效时间等待周期个数设定位,有效时间是10b,周期数为2X1=2.

XintfRegs.XTIMING7.bit.XWRTRAIL = 1;//跟踪时间是1b,周期数为1.

XintfRegs.XTIMING7.bit.XRDLEAD = 1;//读建立时间,1b,周期为1

XintfRegs.XTIMING7.bit.XRDACTIVE = 3;//有效时间是11b,周期是1

XintfRegs.XTIMING7.bit.XRDTRAIL = 0;//跟踪时间是0

XintfRegs.XTIMING7.bit.X2TIMING = 0;

XintfRegs.XTIMING7.bit.USEREADY = 0;//忽略XREADY信号

XintfRegs.XTIMING7.bit.READYMODE = 0;//同步采样

XintfRegs.XTIMING7.bit.XSIZE = 3;//16位数据总线模式

EDIS;

asm(" RPT #7 || NOP");//会执行N+1次NOP指令,占用N+1个指令周期,也就是执行8次NOP指令

}

该配置过程参考手把手书P80和网页:

http://bbs.21ic.com/icview-1622920-1-1.html

9. AD转换实验

ADC信号输入端

TMS320F28335片上有一个12位A/D转换器,前段为2个8选一的多路切换器和2个同时采样/保持器,这两个采样保持器A、B 分别对应着DSP 引脚上的INA0~INA7 和INB0~INB7。构成16个模拟输入通道, 这16 通道可以分为两个8 通道的(独立)和一个16通道的(级联模式),模拟通道的切换由硬件自动控制。并将各模拟通道的转换结果顺序存入16个结果寄存器中。模拟量输入范围:0.0V~3.0V,输入负压或高于3V的电压就会烧毁A/D模块。 转换率:在 25MHz 的 ADC 时钟下为 80ns;

转换结果=4095×(输入的模拟信号-ADCLO)÷3;ADCL0是ADC转化的参考电压值,也就是板子上的ADCREFIN为0,那么转换结果就是在0-3V的电压范围内,输出是:0-4095

多种 A/D 触发方式:软件启动、PWM 模块和外部中断 2 引脚;中断方式:可以在每次转换结束或每隔一次转换结束触发中断;

DSPF28335学习笔记相关推荐

  1. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  2. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  3. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  4. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  5. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  6. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  7. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  8. Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)

    Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...

  9. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

最新文章

  1. axure9中继器添加一列序号自增_中继器如何做简单穿梭框
  2. 【总结】MTO/MTS操作步骤及月末结算
  3. mysql归档日志满了_MySQL核心知识学习之路(1)
  4. java servlet 输出_JavaWeb中servlet读取配置文件的方式
  5. POJ :3614-Sunscreen
  6. java栈API_Java中的堆栈API——Stack
  7. C4D合集灵感|时尚潮流色彩、搭配梦幻C4D元素设计
  8. anaconda中安装xgboost_在windows64位Anaconda3环境下安装XGBoost
  9. LVS详解(六)——LVS DR模式实战
  10. win10常用的小技巧
  11. Android apk签名详解——AS签名、获取签名信息、系统签名、命令行签名
  12. 【转】GB2312 编码
  13. 9.20残差网络 ResNet
  14. 注册表修复工具在哪里找
  15. python中plt.hist_关于python中plt.hist参数的使用详解
  16. 地震观测仪器的历史和发展趋势(三)
  17. mysql数据库的用户是什么_mysql 数据库用户管理
  18. Lucene.Net的简单练习
  19. html的空格代码怎么写?教你如何使用空格nbsp代码(收藏)
  20. 【研究生】横扫13项中文NLP任务:香侬科技提出汉语字形表征向量Glyce+田字格CNN...

热门文章

  1. ASP.NET中的配置文件
  2. 汽车软件刷新——当前安全访问策略的缺陷及改进方案
  3. 傅里叶变换、离散余弦变换、拉普拉斯变换、Z变换
  4. UE4 视角切换,从第一人称角色的视角切换到第三人称角色的视觉
  5. android 跳转Facebook和Instagram
  6. 2023 电脑PC 素材解析浏览器插件 支持20网
  7. php tcp 粘包,TCP 粘包拆包
  8. java毕业设计劳务外包管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
  9. 微服务——服务依赖与治理-服务调用异常、超时,id生成
  10. 学习点云和pcl算法初步②