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

news2024/11/17 22:31:19

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。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

游戏 AI 反作弊|基于时序行为数据的自瞄外挂检测方案,附方案详情!

游戏AI反作弊,上次跟大家分享了基于时序行为数据的透视外挂检测方案,本次跟大家分享 基于时序行为数据的自瞄外挂检测方案,大家记得点赞收藏! 游戏 AI 反作弊|内附解决方案详情!-CSDN博客 基于时序行为数据的自瞄外挂检…

【正点原子Linux连载】第二十二章 Linux INPUT子系统实验摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1)实验平台:正点原子ATK-DLRK3568开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id731866264428 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第二十…

DNS协议 是什么?说说DNS 完整的查询过程?

一、是什么 DNS(Domain Names System),域名系统,是互联网一项服务,是进行域名和与之相对应的 IP 地址进行转换的服务器 简单来讲,DNS相当于一个翻译官,负责将域名翻译成ip地址 IP 地址&#…

【数据分享】1929-2023年全球站点的逐日平均海平面压力(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2023年全球气象站…

笔记本作为其他主机显示屏(HDMI采集器)

前言: 我打算打笔记本作为显示屏来用,连上工控机,这不是贼方便吗 操作: 一、必需品 HDMI采集器一个 可以去绿联买一个,便宜的就行,我的大概就长这样 win10下载 PotPlayer 软件 下载链接:h…

考了PMP证后工资大概是多少 ?

PMP自1999年引入国内以来,大家对这个证书的了解并不深,每年考试的人数也不多。但随着越来越多的企业认可PMP认证,目前考证的人数不断增加,几乎所有与项目管理相关的人都知道这个证书的重要性。这个证书在招聘要求中出现频率较高&a…

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记12:DAC数模转换

系列文章目录 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记01:赛事介绍与硬件平台 嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记02:开发环境安装 嵌入式|蓝桥杯STM32G431(…

【Codesys】-扫描添加失败,手动添加第三方模块,真·DC模式的高速计数模块

欧姆龙耦合器(NX-ECC201)和高速计数模块(NX-EC0132)单独使用。扫描设备添加到Codesys中,会报错,无法自动添加。需要手动添加。内容方法如下。如遇到其他第三方耦合器解决方式也同下面一样。记录一下&#x…

三位数组合-第12届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第42讲。 三位数组合&#…

MySql实战--事务到底是隔离的还是不隔离的

第3篇文章和你讲事务隔离级别的时候提到过,如果是可重复读隔离级别,事务T启动的时候会创建一个视图read-view,之后事务T执行期间,即使有其他事务修改了数据,事务T看到的仍然跟在启动时看到的一样。也就是说&#xff0c…

【zip技巧】4种方法,删除ZIP压缩包密码

之前给大家介绍了zip压缩包加密方法,那么zip压缩包取消密码,大家了解多少呢?有密码的情况下,有哪些方法可以取消密码?无密码又该如何取消密码?今天总结四个方法分享给大家。 一、 最原始的方法&#xff0…

“Hands-free AG audio“和“Stereo“的区别

用蓝牙连接耳机后,发现有两个选项 一个音量大,一个音质好,好奇去查了查。 “Hands-free AG audio”(自由通话音频)是指一种技术或功能,可以使您在进行通话时无需使用手部操作或接触设备。这通常适用于汽车…

Spring:面试八股

文章目录 参考Spring模块CoreContainerAOP 参考 JavaGuide Spring模块 CoreContainer Spring框架的核心模块,主要提供IoC依赖注入功能的支持。内含四个子模块: Core:基本的核心工具类。Beans:提供对bean的创建、配置、管理功能…

智能文档处理技术综述

一、 智能文档处理介绍 智能文档处理(Intelligent Document Processing, IDP)是利用人工智能(AI)、机器学习(ML)、计算机视觉(CV)、自然语言处理(NLP)等技术…

【WEEK4】 【DAY5】AJAX第二部分【中文版】

2024.3.22 Friday 接上文【WEEK4】 【DAY4】AJAX第一部分【中文版】 目录 8.4.Ajax异步加载数据8.4.1.新建User.java8.4.2.在pom.xml中添加lombok、jackson支持8.4.3.更改tomcat设置8.4.4.修改AjaxController.java8.4.5.新建test2.jsp8.4.5.1.注意:和WEB-INF平级&…

R语言学习——Rstudio软件

R语言免费但有点难上手,是数据挖掘的入门级别语言,拥有顶级的可视化功能。 优点: 1统计分析(可以实现各种分析方法)和计算(有很多函数) 2强大的绘图功能 3扩展包多,适合领域多 …

实现UI自动化测试,这5个常见问题你必须知道!

UI自动化测试一直都是如此的令人纠结,自动化测试初学者总是拿它入门,但有些经验丰富者对其又是毁誉参半,抑或抛出分层自动化测试那个经典的“金字塔”,来说明UI自动化测试还是少做为好。 我在从事7年产品研发之后,临危…

【学习】软件测试行业有哪些从业方向

从事任何一个行业,不论想入行的新人还是已经在职的从业人员,一定要系统化的掌握自身的学习路线和发展方向,随时对自身的优劣点掌握清楚。尤其是对于软件测试这个岗位。测试职业所涉及的技能范围比较广,测试流程、测试计划、缺陷管…

Linux如何将桌面版转为mini版-解决中文字体变为英文字体

中文字体转为英文字体 我们进入Rocky-Linux后,ls或者打开文件夹发现有中文 我们执行命令 sudo localedef -i en_US -f UTF-8 en_US.UTF-8将其转为英文,并且重启机器 此时中文转化为英文 桌面版linux转为MINN版 1. 我们可以卸载桌面版 sudo dnf gr…

每日一题——LeetCode1748.唯一元素的和

方法一 两次遍历 var sumOfUnique function(nums) {let map new Map()for(let num of nums){map.set(num,map.has(num)?map.get(num)1:1)}let res0for(let num of nums){if(map.get(num)1) resnum}return res }; 消耗时间和内存情况: 方法二 一次遍历 var su…