CUBE配置

一.配置TIM1 6路pwm

1.TIM1 mode选项卡:

slave mode:不同定时器之间同步时用的,disable。

trigger source:见F7中文手册 图 133.连主TIM的TRGO。因为只用TIM1,所以这里disable。

clock source:一般选内部时钟。(CK_INT)。TIM1 TIM8 高级定时器,是挂在APB2时钟线上的,其他定时器是挂在APB1时钟总线上的。中文手册664页。

 

 

channel1:选择通道模式,有输出比较模式、pwm模式、输入捕获模式等等。这里选:PWM generation CH1 CH1N。一个通道发出两路互补的PWM。

 

2.configuration-parameter setting:

counter settings: PSC:预分频器。指的是上文得到的CK_INT ,经过N分频得到CN_CNT。

//定时器时钟:CK_INT。分频系数:PSC。计数个数:ARR。500ms:溢出时间。

 

counter mode:向上计数、向下计数、中心计数模式1、2、3。中心计数123区别为:

//中断产生的位置不同。这里选择中心计数模式1.

 

 

 

 CKD:这个分频指的是从CK_INT得到tDTS,后者是死区及采样时钟。这里不分频。No division

RCR:重复计数器,

//中心对齐模式123指的是 CNT = CCR,在一个周期内,有两个点,决定哪个点产生更新。通常可结合RCR确定adc触发位置。

 

这里设为1.                                                                                                                                                        //RCR指的是,发生几次溢出(上溢/下溢,CNT到0或ARR),更新一次事件。通常可作为ADC的触发信号。

 auto reload preload:enable。决定arr寄存器有没有缓冲。

//进行缓冲指的是发生更新事件时才把arr的内容送到影子寄存器。

 

 trigger output(TRGO) parameters:

MSM bit:enable,用tim1产生一个TRGO信号给到其它定时器(TRGO0)或DAC/ADC(TRGO2)。这里是给到ADC。

TRGO:

TRGO2:选择给到谁。                //不用内部adc的话,这个没啥用。

Break and dead time management (BRK):                                    //需要设置tim bkin引脚。将此引脚连至电压电流(对三相桥过压、过流保护)

BRK state:enable。

BRK polarity:low。即刹车引脚输入低电平的时候,Pwm输出关闭(两路)。

BRK filter: 

 

 

BRK sources configuration:digital input enable。 digital input polarity:high 。DFSDM:数字滤波,这里没用到(具体功能百度)。

Break and dead time management (BRK2):disable。

Break and dead time management output configuration:

automatic output state:disable。  enable 的意思是检测到低电平了(前边设置的是低电平),就自动关闭pwm。

OSSR:enable

OSSI:enable

 

 

lock configuration:上锁设置,上锁后某些参数就不能更改了。

Dead time :125.

 

 pwm generation chanel1 and 1N:

mode:pwm mode 1  模式12 只是极性不同。

pulse:这个就是占空比。

网上一个图:

二. H745的FMC

https://blog.csdn.net/Calvin790704/article/details/83866997?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase

  1.使用HCLK3时钟,200M(H7最高FMC频率)。(与fpga的自己写的bus模块的输入频率一致频率) 

      2. 连接斯巴达6。FMC采用突发访问模式.(ADDSET DATASET ADDHOLD).

//同步访问模式:fmc发出一个时钟,给到fpga,主要设置时钟分频参数得到
突发访问模式:fmc和fpga之间无时钟线,主要设置ADDSET DATASET ADDHOLD 等

 

 

 

 在实际扩展时,根据选用存储器的特征确定时序模型,从而确定各时间参数与存储器读/ 写周期参数指标之间的计算关系;利用该计算关系和存储芯片数据手册中给定的参数指标,可 计算出 FMC 所需要的各时间参数,从而对时间参数寄存器进行合理的配置。

  3.选择SRAM  。  

       4.选择NE1区。

 

  5.地址线8bit(0-26),数据线32bit,与fpga程序一致。实际上还有2条ADDR[27:26],是管理地址映射的,选定NE1后,自动设置成了00。上图所示的0x6_ _ _ _ _ _ _,高四位为6不变,次高4位的前两位就是27:26这两条。

/*
关于地址映射:
fmc支持的地址是按字节访问的。如访问0x6 0 0 0 0 0 0 0地址时,是以
一个字节为单位进行读数写数的。如果存储器是只能以16bit数宽进行读写,
fmc提供了一种解决方法——地址映射。
(FMC在硬件设计上就提供了一种解决办法,将内部总线ADDR[25:0]措位后接到FMC_A地址引脚上。) 
*/

 

 

https://blog.csdn.net/qq_41909909/article/details/107267583
地址移位的理解。
其实就是计组原理中讲得按字节寻址、按字寻址的区别。

 

如配置外部存储器的宽度为16位, FMC将使用内部的ADDR[25:1]地址来作为对外部存储器的寻址地址FMC_A[24:0]。如果存储器宽度为32位, FMC将使用内部的ADDR[25:2]地址进行外部寻址。

但是不管存储器的宽度是多少, FMC_A[0]都应连接到外部存储器地址A[0]。

这里有一点要补充下,如果外接SDRAM/SRAM配置为16位或者32位带宽的时候,如何实现字节方式的读写。针对这个问题,SDRAM/SRAM都有专门的字节控制引脚,所以操作起来比较方便。
这里fpga是32bit数据总线,但是一共不到10个地址(一个功能一个地址)。

  6.wait设置:

 

 

 

 我veriloog程序中没有用到FMC_NWAIT,相当于没有这种功能,所以设为0.中文参考手册f7 的315页

  7.byte enable设置:

  8.bank mapping:H7的地址支持重映射,这里使用默认映射就好。

fpga分配地址(给变量define数)的时候,范围要在这里边。

 

我fpga中使用8bit作为地址总线。FMC_NE1:首地址0x6000 0000,可以管理的地址范围0x6000 0000到0x63FF FFFF,64MB。

 9.模式A时序:

 

 

左边是fmc从fpga中读,右边是fmc向fpga中写(模式A)

 

NBL[x:0]高低字节控制信号,NEx片选信号,NOE读使能信号和NWE写使能前面的字母N(Ngative)示这几个信号低电平有效。
  地址信号A[25:0],NBL[x:0]高低字节控制信号,要在NEx片选信号使能前准备就绪。整个读取过程中,NWE写使能信号是不起作用的,被设置为高电平。
  NEx片选后,NOE要保持一段时间的高电平,这个时间就是ADDSET地址建立时间(通过寄存器FMC_BTRx可配置)。之后NOE变为低电平,读使能。低电平保持的时间由DATAST数据建立时间(通过寄存器FMC_BTRx可配置)决定。
  读取完毕数据后,NOE变成高电平,NEx变成高电平。
A模式没有用到地址保持时间。

9.extended mode:

读取数据、写入数据用一样的时序,所以设为0

 

 

 10.bus turn around time

没用到,随便设。这个是数据线复用地址线时候用的。

posted @ 2021-05-17 16:39  jamaal555  阅读(182)  评论(0)    收藏  举报