CPU设计实战-外设接口介绍与测试

GPIO

内置寄存器,BASE地址由外设所在设备接口处决定,这样就可以确定每个寄存器的地址;

要使用输出先要使能,要用中断也先要使能;

测试实验-数码管驱动

数码管与GPIO的输出接口连接

编写汇编语言

1.使能输出端口

2.禁止中断

3.写入输出寄存器

   .org 0x0
   .set noat
   .set noreorder
   .set nomacro
   .global _start
_start:
   lui $1,0x2000
   ori $1,$1,0x0008
   lui $2,0xffff
   ori $2,$2,0xffff
   sw  $2,0x0($1)

   lui $1,0x2000
   ori $1,$1,0x000c
   lui $2,0x0000
   ori $2,$2,0x0000
   sw  $2,0x0($1)


   lui $1,0x2000
   ori $1,$1,0x0004
   lui $2,0x4740
   ori $2,$2,0x4106
   sw  $2,0x0($1)

修改链接语言的入口地址,起始地址为flash的地址

MEMORY
        {
       
        ram    : ORIGIN = 0x30000000, LENGTH = 0x00000300
        }

UART

当Line Control Register (LCR)寄存器的第7bit为1时,地址Base + 0x0、base +0x1对应的就是两个分频系数寄存器,反之,对应的是上表的寄存器。

UART测试实验

汇编语言测试代码:

1.设置分频系数寄存器(先对LCR寄存器最高位置1)

2.UART寄存器初始化,设置LCR寄存器(设置接收数据格式)

置UART收、发数据格式为8位数据位、没有奇偶校验位、1位停止位。

3.写入发送数据(在地址0x10000000THR用于发送写入的数据)

4.检查UART控制器是否发送数据完毕,如果发送完毕,那么回到第三段,将寄存器$3加1,再次通过UART发送,否则,等待数据发送完毕。其中,检查是否发送完毕的方法就是读取Line Status寄存器的值,Line Status寄存器的第5bit是发送FIFO空标志,如果数据发送完毕,那么会设置该位为1。

在通过UART发送数据时注意,虽然UART控制器具有了FIFO,但是最好也不要连续快速发送数据,否则容易发生FIFO满的情况,导致数据丢失。所以,在测试程序中,在发送数据前都要先判断发送FIFO是否为空。
 

  .org 0x0
   .set noat
   .set noreorder
   .set nomacro
   .global _start
_start:
   lui $1,0x1000
   ori $1,$1,0x0003
   ori $2,$0,0x80
   sb  $2,0x0($1)

   lui $1,0x1000
   ori $1,$1,0x0001
   ori $2,$0,0x00
   sb  $2,0x0($1)    # MSB of divisor latch 

   lui $1,0x1000
   ori $1,$1,0x0000
   ori $2,$0,0xB0
   sb  $2,0x0($1)    # LSB of divisor latch 

   lui $1,0x1000
   ori $1,$1,0x0003
   ori $2,$0,0x03
   sb  $2,0x0($1)    # 8bit, no parity, 1 stop bit
   
   ori $3,$0,0x0   

_loop1:
   addi $3,$3,0x1
   lui $1,0x1000
   ori $1,$1,0x0000
   sb  $3,0x0($1)    # transmit $3

_loop2:
   lui $1,0x1000
   ori $1,$1,0x0005
   lb  $2,0x0($1)    # get line status register
   andi $2,$2,0x20
   beq $2,$0,_loop2
   nop
   j _loop1
   nop

Flash

读时序如上图,其中tacc表示给出地址到数据输出的延时,这个需要根据flash'的型号来确定查询芯片手册找到tacc的最大值

如最大70ns,那么用50MHZ的(20ns)时钟周期需要等待4个时钟周期(这里需要修改原程序代码,原程序是基于27MHZ)

另外本flash是NOR flash(使用字进行访问),还需要查看芯片手册确定数据线宽,如果是8位,那么需要对32位指令读四次

SDRAM

SDRAM (Synchronous Dynamic Random Access Memory)是同步(时钟同步)动态(存储列阵需要不断刷新)随机(自定义读写地址)访问存储器

如何确定读写地址?

内部是多个阵列(Bank)组成,寻址时给出Bank编号,Bank内部通过行列地址确定:

容量计算?

SDRAM的容量就等于“Bank数量*存储单元宽度*地址数(行地址*列地址)”

配置计算?

需要查看手册确定参数

有以下几点说明。
(1)模式寄存器配置为1000000000表示CAS延迟为3个时钟周期,突发长度为2 (一次读出16bit, 2次正好32bit),突发模式是线性(Linear)。
(2)参数cfg_ sdr_ cas是CAS延迟的值,应该等于模式寄存器中配置的值,但是笔者在实验的过程中发现该值不能等于模式寄存器中配置的值,而是要比后者的值大1,所以此处设置为3"b100。
(3) A3V64S40ETP-G6芯片的每个Bank有4096 行,此处设置每次刷新的最大行数cfg_sdr_rfmax为4,所以在64ms内要求有1024次刷新,每次刷新之间的时间间隔是(64/1024)ms。另外,小型SOPC计划使用DE2开发平台上提供的27MHz时钟源作为工作时钟,(64/1024) ms即大约1688个时钟周期,所以设置cfg_ sdr_ rfsh 为12'b01101001 1000。

如果50MHZ的时钟,(64/1024) ms即大约3125个时钟周期,所以设置cfg_ sdr_ rfsh =12'b1100 0011 0101。

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

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

相关文章

LangChain入门:3.调用OpenAI的聊天机器人-入门

内容 本次入门内容是调用OpenAI的聊天机器人功能。 实现原理是使用OpenAI提供的API,通过向其发送请求来生成回复文本。 首先,导入ChatOpenAI类,这个类是用于实现与OpenAI聊天机器人交互的。 pip install langchain-openai2. 编写调试代码 …

07、JS实现:用回溯法实现数组全排列的算法(一步一步剖析,很详细)

回溯法实现数组全排列的算法 Ⅰ、回溯法实现数组全排列:1、题目描述:2、解题思路:3、实现代码: Ⅱ、小结: Ⅰ、回溯法实现数组全排列: 1、题目描述: 给定⼀个 没有重复 数字的序列,…

Pillow教程06:将图片中出现的黄色和红色,改成绿色

---------------Pillow教程集合--------------- Python项目18:使用Pillow模块,随机生成4位数的图片验证码 Python教程93:初识Pillow模块(创建Image对象查看属性图片的保存与缩放) Pillow教程02:图片的裁…

律甲法务OA平台:信鸥科技引领法律行业新篇章

随着信息技术的飞速发展,法律行业也迎来了数字化转型的重要时刻。在这个信息化、智能化的时代,如何运用科技手段提升法律服务的质量和效率,成为法律行业亟待解决的问题。信鸥科技,作为业界的佼佼者,凭借其深厚的技术积…

flask_Restful数据解析参数设置

add_argument 方法参数详解 add_argument方法可以指定这个字段的名字,这个字段的数据类 型等,验证错误提示信息等,具体如下: default:默认值,如果这个参数没有值,那么将使用这个参数 指定的默认…

CTR之Session行为序列建模用户兴趣:DSIN

在前面的文章中,DIN模型 在用户行为序列建模中引入注意力机制来强调加权与target item相关的行为,以实现动态的兴趣表征;而DIEN模型 则在DIN的基础上加入时间性信息,使用注意力机制的GRU来挖掘用户兴趣的演变。 而今天的这篇文章…

labelme自动标注工具的安装和python代码修改

labelme嵌入SAM和EfficientSAM自动标注模型 目录: 1.labelme windows环境下安装python版本labelme 2.labelme.exe直接安装 3.labelme生成exe 4.labelme python代码修改 labelme自动标注使用方法 编辑/Create AI-Polygon 自动分割,直接生成分割图,标注为point,完成标注后…

如何用AI写作工具输出高质量内容?

随着人工智能技术的不断发展,AI写作工具正逐渐成为现代写作者的得力助手。它们能够通过智能算法分析大量的数据,生成高质量的文章内容,极大地提高了写作效率。但是,如何正确地使用这些AI写作工具输出高质量的内容,仍然…

Windows Server服务器FTP服务的配置与管理

前不久我们遇到一个Hostease的客户进行服务器迁移,他需要在Windows Server 2019上设置FTP(File Transfer Protocol)服务以帮助他在服务器和客户端之间传输文件。本教程将指导您逐步完成设置FTP服务的过程,并附上详细的图文说明&am…

AI智能分析网关V4使用GB28181注册到EasyCVR平台的具体步骤

旭帆科技的智能分析网关V4内含近40种智能分析算法,包括人体、车辆、消防、环境卫生、异常检测等等,在消防安全、生产安全、行为检测等场景应用十分广泛。如常见的智慧工地、智慧校园、智慧景区、智慧城管等等,还支持抓拍、记录、告警、语音对…

文献速递:基于SAM的医学图像分割--SAMUS:适应临床友好型和泛化的超声图像分割的Segment Anything模型

Title 题目 SAMUS: Adapting Segment Anything Model for Clinically-Friendly and Generalizable Ultrasound Image Segmentation SAMUS:适应临床友好型和泛化的超声图像分割的Segment Anything模型 01 文献速递介绍 医学图像分割是一项关键技术,用…

嵌入式开发——基础电路知识

1. 电路知识 1.1. 驱动能力 IC是数字逻辑芯片,其输出的是逻辑电平。逻辑电平0表示输出电压低于阈值电压,逻辑1表示输出电压高于阈值电压。负载则是被驱动的电路或元件,负载大小则指负载的电阻大小。 驱动能力主要表现在几个方面&#xff1…

jenkins权限分配

1.安装权限插件 Role-Based Strategy 2.创建用户 3.修改全局安全配置中的授权策略为Role-Based Strategy 4.进入Manage and Assign Roles创建Global roles和Item roles 4.进入Assign Roles给用户分配role

JavaScript混淆工具选择与使用指南

摘要 本文介绍了什么是js混淆工具,以及为什么需要使用js混淆工具。详细解释了js混淆工具的实现原理和作用,探讨了如何选择合适的js混淆工具,列举了几款常用的js混淆工具,并对它们的特点和适用场景进行了分析。最后总结了js混淆工…

Springboot:Actuator监控

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一、Actuator介绍 二、集成步骤 三、重要端点介绍 1、/actuator 2、/actuator/env 3、/actuator/heapdump 4、/actuator/metrics 5、/actuator/shutdown 6、/l…

jsp指令和动作

1.page指令:描述页面信息 pageENcoding:软件编码 contentType:浏览器编码 2.include指令:将多个网页合成一个网页,静态包含网页 问题:1.在网页源代码中,会形成错误的多遍代码,将主页面代码和…

Qt Design Studio各个组件怎么用?【长期更新】

写在前面:本文长期更新,建议点赞/收藏/关注~ 在Qt Design Studio中,组件类别有: 每一种,都有其特定的用途和适用场景: 1.My Components 使用时机:当你需要重用自定义的设计元素或者特殊功能…

Capture One 23 下载地址及安装教程

Capture One 23 安装教程 Capture One是一款专业的图像编辑和管理软件,由丹麦公司Phase One开发。它广泛应用于专业摄影师和摄影爱好者之间的图像后期处理和管理。 Capture One提供了强大的图像编辑工具和功能,用于调整曝光、对比度、色彩、白平衡、…

Java_17 两数之和

两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任…

VRAY渲染设置大神参数(建议收藏)

3dmax效果图云渲染平台——渲染100以3ds Max 2024、VR 6.2、CR 11.2等最新版本为基础,兼容fp、acescg等常用插件,同时LUT滤镜等参数也得到了同步支持。注册填邀请码【7788】可领30元礼包和免费渲染券哦~ 公用:输出大小:一般小图50…