做视频网站 买带宽广州 网站建设模板

张小明 2026/1/11 10:45:27
做视频网站 买带宽,广州 网站建设模板,制作简单网页的步骤,大连做网站需要多少钱管目前工业以太网已经相当普及#xff0c;但在工控领域仍然存在大量使用UART通过RS485和RS422组网的设备和控制器#xff0c;导致含有多UART的嵌入式系统仍有较大市场需求。意法半导体和兆易创新等主流微控制器#xff08;MCU#xff09;厂商都有10个以上UART的器件#x…管目前工业以太网已经相当普及但在工控领域仍然存在大量使用UART通过RS485和RS422组网的设备和控制器导致含有多UART的嵌入式系统仍有较大市场需求。意法半导体和兆易创新等主流微控制器MCU厂商都有10个以上UART的器件但在很多场景下仍然无法覆盖所有应用场景。另外对于主控单元是微处理器MPU能运行Linux的嵌入式系统UART口一般较少就不得不使用16C550/16C554这类扩展芯片来实现多UART。用FPGA来实现可定制的多UART口扩展是一种不错的解决方案。其中在Zynq上通过AXI总线扩展多个UART难度不高但限制了主控单元的使用且成本较高。我趁着这个国庆长假在低成本的国产FPGA/CPLD上实现了一种基于FSMC接口GD32上称为EXMC接口的多串口控制器适用于所有兼容ISA总线接口的嵌入式MCU/MPU系统。可以根据应用场景任意裁剪UART的个数、FIFO缓冲的深度。以下原创内容欢迎网友转载但请注明出处 https://www.cnblogs.com/helesheng欢迎大家在本人的github仓库下载验证https://github.com/helesheng/uart_fsmc_fifo回到顶部一、整体结构我设计的多UART控制器采用外设地址映射模式思路FPGA模拟成一个8位的FSMC设备和处理器如STM32通信。其中每个UART口占用数据接收寄存器地址UARTx_RX_Reg_Addr小写x可以代表任意串口编号的阿拉伯数字下同、接收缓冲长度寄存器地址UART1_RX_LEN_Reg_Addr、数据发送寄存器地址UARTx_TX_Reg_Addr以及发送缓冲长度寄存器地址UARTx_TX_LEN_Reg_Addr共四个字节的地址另外每个UART口还占用了发送状态寄存器STAT_TX_Addr和接收状态寄存器STAT_RX_Addr中的各一个位来表示该UART当前是否处于发送或接收状态。其中每个UART的数据发送和接收寄存器在逻辑概念上虽然只占用的一个字节的地址但在物理上却映射到一组接收FIFO和发送FIFO的一个端口。以接收FIFO为例每当UART口收到一个字节的数据A时FPGA就会将该数据压入接收FIFO中而处理器也不需要立即将刚收到的数据读走因为即使处理器没有及时地在下次收到数据B之前读走该数据FIFO还是能够缓存这个新数据。而当处理器腾出时间处理该UART口的接收数据时还是能从同一个地址UARTx_RX_Reg_Addr按照收到这些数据的顺序A-B-C....依次读取他们。这种方式的优势有二1、相对于嵌入式处理器UART属于低速设备对于接收而言增加了FIFO缓冲的UART控制器无需处理器过于频繁的查询只需要间隔相当一段时间查看一下FIFO中是否缓存了数据即可对于发送而言增加了FIFO缓冲的控制器也可以一次缓冲多个需要发送的字节降低处理器关注的频率。2、发送和接收缓冲分别都只占用一个字节的地址空间即可实现任意长度数据包的收发。当然代价是处理器只能顺序访问缓冲区而无法实现随机访问但这对于需要严格按顺序读写的UART口而言这并不是问题。下面的代码是我在作为处理器的STM32代码中定义的UART相关寄存器地址UART寄存器地址STM32侧FPGA代码中定义的UART相关寄存器地址UART寄存器地址FPGA侧回到顶部二、FPGA中八位并行接口FSMC设备端的实现1、读写时钟控制信号的产生下图是我在STM32手册中截取的配置成SRAM的读写模式时FSMC接口的读写时序。image图1 FSMC(SRAM模式)读时序image图2 FSMC(SRAM模式)写时序对于100pin的STM32而言并不拥有全部26根地址线而只有A16-A23共8根以及一根自动产生的片选线NCE1/NCE2控制地址范围达到全部4G寻址空间的四分之一。FPGA侧为了实现FSMC的设备端接口核心要求是能够在写使能NWE和读使能NOE控制下在FPGA中实现数据的锁存和输出。有两种合理的技术路线其一使用NWE或NOE作为数据寄存器的锁存时钟其二用FPGA系统时钟作为数据寄存器的锁存时钟NWE或NOE作锁存器读写的使能信号。第一种思路最直接但问题是缓冲FIFO的存储时钟只能由STM32的读、写动作产生但一般FIFO IP在真正进行读写之前也需要时钟信号来完成初始化。如果采用第一种技术路线势必需要STM32作几组无意义的“空读写”以产生必要的初始化时钟。另外也可能由于STM32到FPGA之间的PCB走线造成时序约束难度的增加并提升外部高频信号干扰的可能因此我没有选择这条技术路线。第二种思路的难点在于NWE或NOE信号低电平期间可能产生多个FPGA的系统时钟从而造成对同字节数据被缓冲FIFO看做多个数据进而被多次读或写。为实现第一种技术路线我用如下代码将长度不确定的NWE或NOE信号转换为一个长度为1个系统时钟的正脉冲作为缓冲FIFO的读写使能控制信号。完美的解决了单次STM32读写造成多次缓冲FIFO读写的问题。读端口使能控制信号rd_uart_rx_fifo_1ck上述代码的核心思路是检测NWE或NOE信号上出现的下降沿此处被语句assign en_fsmc_oe (fsmc_a[21] 1b0) (rd_n 1b0) (cs_n 1b0);变成了en_fsmc_oe和rd_uart1_rx_fifo信号的上升沿方法是用移位寄存器缓冲两个FPGA系统时钟有效边沿时刻的信号并用异或判断二者是否相反最后用与运算判断是上升沿还是下降沿。这种方法有效的避免了NWE和NOE持续时间超过一个FPGA系统时钟周期以及上升、下降沿混淆的问题。但应注意由于STM32产生的NWE或NOE信号与FPGA系统时钟不同步wr_data_1ck信号上持续的1个时钟周期的高电平最早可能开始于NWE或NOE下降沿出现的瞬间最迟可能开始于NWE或NOE下降沿出现一个时钟周期之后——因此由图1可知读数据建立DATAST应该大于1或272MHz HCLK。2、双向数据线数据输出及高阻态控制其核心思想是设计一个组合逻辑数据多路器将不同地址输出的数据连接到out_data[7:0]并用输出使能信号en_fsmc_oe实现高阻态控制。读端口输出电路设计3、收、发缓冲FIFO的实现我使用了安路低成本的小精灵2EF2系列价格最低的一款CPLD/FPGA来实现我的设计下图是TDTang Dynasty开发环境中FIFO的图形化配置界面每扩展一个深度为256字节的UART需要2个这样的FIFO各分别作发送和接收缓冲。选择用片上的9K块RAM资源来实现而没有选择用LE中的DRAM离散RAM原因是为了降低应用对宝贵LE资源的占用但由于258*8的结构其实只使用了每个EMB9K中RAM资源的四分之一后续复杂应用还有较大的缓冲深度升级余地。对资源最少的EF2L15而言由于只有6个EMB9K最多只能实现3个UART口。若需更多UART需要选择更大的可编程芯片。image图3 256字节的缓冲FIFO下面是发送和接收FIFO的例化代码。接收和发送缓冲FIFO例化4、UART模块的实现TD自带UART的IP配置界面如下图所示。其中模块时钟为50MHz不建议大家为了省电使用更低频率实验显示使用低频时钟后UART连续接收多个字节数据包时可能出现少量字节识别错误。image图4 UART模块配置下面是UART的例化代码。例化UART IP代码该模块收、发时序如下图所示。image图5 UART模块接收数据时序image图6 UART模块发送数据时序正确完成一个字节数据的接收后模块将在rx_vld上产生1个时钟周期的高电平正好用于接收缓冲FIFO的写使能信号嵌入式处理器可以在合适的时间从接收FIFO中读取之前收到的数据。发送控制信号tx_en的生成逻辑比较麻烦它需要在发送FIFO非空的情况下不断产生长度为1个时钟周期的正脉冲。我使用一个有限状态机FSM来产生所需的读取发送缓冲FIFO的信号和使能UART发送的tx_en信号。读取发送缓冲和UART发送使能控制状态机缺省状态为空闲状态WAIT_STATE只有当UART发送完成uart_tx_rdy_wire为1且发送缓冲FIFO中有数据时uart_tx_fifo_empty为0状态机才进入读取发送缓冲FIFO状态READ_FIFO_STATE以及启动UART发送状态WRITE_UART_REG_STATE而后两个状态都只固定的停留1个时钟周期。对应的标志uart_tx_fifo_rd_en_1ck和uart_tx_en_1ck则被分别连接到了前文提到的发送缓冲FIFO模块和UART模块。5、状态寄存器内容的更新状态寄存器中可以存放任何UART控制器想与嵌入式处理器沟通的内容。为防止不同状态位延迟不同造成的竞争和冒险我采用一组寄存器来锁存状态锁存时钟就是系统时钟。UART状态寄存器的实现其中PERI_UART_RX_STATE[7:0] 等寄存器地址请参考本文开始阶段的定义。6、FPGA时序约束本文所述电路系统频率仅为50MHz且作为UART模块外部IO接口频率在1MHz以下基本不需要太严格的时序约束。我只对输入10MHz时钟和PLL派生出的50MHz时钟进行了简单约束如下时钟约束回到顶部三、嵌入式控制器代码的实现如果选择STM32作为嵌入式控制器则需选择100pin以上的型号方具备FSMC接口起初始化代码如下。FSMC初始化代码我在STM32中移植了RTOS每个任务负责管理一个UART定时查询接收状态寄存器STAT_RX_Addr在有数据时不断读取接收FIFO随后将收到的数据再发给同一个串口。这样用PC和串口调试助手就可以观察每个串口的收发功能是否正确了。管理单个UART口的任务代码举例回到顶部四、总结为了验证功能的正确性我在低成本的EF2L15上用上述方法实现做了两个UART每个UART约占用400-500个LE之外还占用2个EMB9K分别不间断的用两个UART口分别运行modbus协议栈通信和读取传感器数据测试目前为止未发现问题。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

免费网站建设 优帮云单页网站订单系统怎么改邮箱

抖音自动化神器:Python批量发布工具的完整实战指南 【免费下载链接】douyin_uplod 抖音自动上传发布视频 项目地址: https://gitcode.com/gh_mirrors/do/douyin_uplod 抖音自动上传工具是一款基于Python开发的智能视频发布助手,专为内容创作者和运…

张小明 2025/12/26 8:52:08 网站建设

网络营销工程师前景新乡网站seo

12306智能抢票工具完全操作指南:从零基础到高效抢票 【免费下载链接】12306 12306智能刷票,订票 项目地址: https://gitcode.com/gh_mirrors/12/12306 还在为春运抢票而烦恼?每次打开12306都看到"无票"提示,复杂…

张小明 2025/12/30 8:13:08 网站建设

宽屏网站模板html国内5大搜索引擎

第一章:Open-AutoGLM模型开源背后的技术突破Open-AutoGLM的开源标志着大语言模型在自动化推理与生成能力上的重大跃进。该模型不仅继承了GLM架构的双向注意力机制优势,更通过创新性的动态思维链(Dynamic Chain-of-Thought)技术&am…

张小明 2026/1/6 13:32:18 网站建设

做视频网站付费版个人博客网站建设预算

直播带货话术优化:基于竞品分析的AI建议系统 在直播间里,一句话能决定一场直播的成败。一个精准的情绪钩子、一句恰到好处的价格锚定,甚至是对用户痛点的一次共情回应,都可能直接撬动转化率的跃升。然而,大多数主播仍在…

张小明 2025/12/26 8:50:25 网站建设

怎么做自己网站产品seowordpress小蜜蜂

一、项目介绍 项目背景: 太阳能电池板是太阳能发电系统的核心组件,其质量直接影响发电效率和系统寿命。然而,在生产和使用过程中,太阳能电池板可能会出现多种缺陷,如black_core(黑芯)、crack&a…

张小明 2026/1/10 8:25:33 网站建设

自媒体采集网站建设设计网站

Photoshop 图像编辑与尺寸调整全攻略 1. Photoshop 工具盒介绍 Photoshop 提供了各种专业工具用于图像编辑,熟悉工具盒中的工具是很有必要的。你可以通过点击工具盒中的按钮或输入快捷键来选择工具,快捷键会在括号中显示。以下是部分工具的介绍: | 工具名称 | 快捷键 | 功…

张小明 2025/12/27 9:47:33 网站建设