openMSP430 介绍
https://www.sohu.com/a/151419737_781333
openMsp430 是OpenCore 上的一款很小巧的开源MCU核,指令集完美兼容市面上MSP430 MCU。从2009年发布开始,一直到2015年,该core每年都有更新,可见作者对这个core是很认真的。而且从代码风格和注释来看,歪果仁做事果然认真。
这个除了core之外,作者还设计了很多外设,ClockModule,Watchdog,,sfr,乘法器,gpio等,还有一个专门用于调试的debug接口。难能可贵的是,ClockModule,Watchdog,Timer,gpio等与TI的MSP430F基本兼容,所以很多程序可以直接移植。
我们做设计,一般都是刚开始先做一个简单的框架,后面再在这个框架上添加很多东西,功能越来越强大,系统也越来越复杂。有时的做法又刚好相反,把一个庞大的系统,不断删减东西,直到不能再删为止,留下最精华的部分,也正是我们需要的部分。openMSP430这个系统不算庞大,可以说是很小巧,相对于OR1200,简洁很多了,不过性能也没有or1200强。但是各有各的用武之地。随人openMSP430已经很小巧了,但是对于FPGA实现来讲,还可以再删减,删减到只剩下内核。因为对于具体的应用,标准的外设并不一定适合我们的需求,而我们正好可以利用FPGA的灵活性,自己设计我们的外设。把流程控制交给软件做,而一些复杂的时序,接口,运算等,交由硬件完成。所以对于这个430核,留下内核就可以了,而其他外设,可以根据需要再集成。
所以,我对这个核做了进一步精简,只留下最核心的内核部分。精简后mcu核结构如下图所示。
mcu核主要有以下几组接口:
l pmem interface,程序存储器接口
l dmem interface,数据存储器接口
l per interface,外设存储器接口
l 中断接口,irq,irq_acc
l 时钟复位:mclk,puc
精简后的mcu核顶层如下:
接口说明
Name |
Dir. |
Width |
De |
|
dmem_addr |
Output |
`DMEM_AWIDTH |
数据存储器地址 |
|
dmem_cen |
Output |
1 |
数据存储器使能,低电平有效 |
|
dmem_din |
Output |
16 |
数据存储器数据输入 |
|
dmem_wen |
Output |
2 |
数据存储器写使能,地有效 |
|
dmem_dout |
Input |
16 |
数据存储器数据输出 |
|
pmem_addr |
Output |
`PMEM_AWIDTH |
程序存储器地址 |
|
pmem_cen |
Output |
1 |
程序存储器使能,低电平有效 |
|
pmem_din |
Output |
16 |
程序存储器数据输入 |
|
pmem_wen |
Output |
2 |
程序存储器写使能,地有效 |
|
pmem_dout |
Input |
16 |
程序存储器数据输出 |
|
per_addr |
Output |
8 |
外设总线地址 |
|
per_din |
Output |
16 |
外设总线数据输入,mcu-》peripheral |
|
per_wen |
Output |
2 |
外设总线数据写使能,高有效 |
|
per_en |
Output |
1 |
外设总线使能,高有效 |
|
per_dout |
Input |
16 |
外设总线数据输出,Peripheral--》mcu |
|
irq_acc |
Output |
14 |
中断相应握手 |
|
irq |
Input |
14 |
中断输入 |
|
mclk |
Input |
1 |
mcu 运行时钟 |
|
puc |
Input |
1 |
mcu复位信号 |
接口时序图
PMEM 接口时序仿真图
DMEM接口时序仿真图
Peripheral时序
2 omsp430ik2.1 逻辑电路说明
omsp430ik(integrated kits)是应用openMSP430核的最小soc平台。为了验证mcu功能,集成了GPIO和UART两个最基本的输入输出模块。在这个平台上,通过添删外设,可以快速的搭建您的目标SOC系统。
模块层次如下图。
omsp430ikmcu结构图
GPIO和UART寄存器说明
GPIO和430的GPIO兼容,UART是自己定义的。
RegAddr |
RegName |
R/W |
Width |
Deion |
0x20 |
P1IN |
R |
8 |
P1输入 |
0x21 |
P1OUT |
R/W |
8 |
P1输出 |
0x22 |
P1DIR |
R/W |
8 |
P1方向控制,0=输入,1=输出。 |
0x23 |
P1IFG |
R/W |
8 |
P1中断标志 |
0x24 |
P1IES |
R/W |
8 |
P1中断边沿选择。0=上升沿;1=下降沿; |
0x25 |
P1IE |
R/W |
8 |
P1中断使能。高有效 |
0x40 |
UTXBUF |
R/W |
8 |
UART发送缓存。 |
0x41 |
URXBUF |
R/W |
8 |
UART接收缓存 |
0x42 |
UCTL |
R/W |
1 |
Bit0:UART接收中断使能。高有效。 |
0x43 |
UFLAG |
R/W |
2 |
Bit0:收到1字节数据标志。需软件清零 Bit1:发送忙标志。1表示正在发送。 |
0x44 |
BR0 |
R/W |
8 |
波特率设置低8位 |
0x45 |
BR1 |
R/W |
8 |
波特率色合作高8位。 BR0,BR1配置值计算:系统时钟/波特率 |
3 IAR-FOR-430程序编译说明
由于omsp430完全兼容430的指令集,所以可以用任何430的编译软件编译C代码或汇编代码。我用的是IAR for 430,5.5版本。
寄存器的定义可用__no_init 指令定义,如下表是UART寄存器的定义
#define UART_BASIC 0x40 __no_init volatile unsigned char UTXBUF @ (UART_BASIC + 0x0); __no_init volatile unsigned char URXBUF @ (UART_BASIC + 0x1); __no_init volatile unsigned char UCTL @ (UART_BASIC + 0x2); /*[0]=uart rx irqen*/ __no_init volatile unsigned char UFLAG @ (UART_BASIC + 0x3); /*[0]=rxflag;[1]=txbusy*/ __no_init volatile unsigned char UBR0 @ (UART_BASIC + 0x4); /*baudrate[7:0]*/ __no_init volatile unsigned char UBR1 @ (UART_BASIC + 0x5); /*baudrate[15:8]*/ |
也可以用定义指针的方式定义寄存器,如下:
#define P1IN (*(volatile unsigned char *) 0x0020) #define P1OUT (*(volatile unsigned char *) 0x0021) #define P1DIR (*(volatile unsigned char *) 0x0022) #define P1IFG (*(volatile unsigned char *) 0x0023) #define P1IES (*(volatile unsigned char *) 0x0024) #define P1IE (*(volatile unsigned char *) 0x0025) #define P1SEL (*(volatile unsigned char *) 0x0026) |
在使用IAR进行软件开发时,需要设置以下几个地方
1 选择合适的器件
选择一款ROM和RAM容量相适配的器件。选择方式如下图。
可在Output项下面点击*.xcl看我们选择的器件的信息,如下
上图信息: ROM容量, E000-FFFF,8K. RAM容量:0200-02ff. 256byte。
ROM的配置必须跟omsp的设置一样,否则程序运行错误。
如果找不到适合的器件,也可以手动自己修改xcl文件。修改xcl文件的以下几个语句:
修改ram:
// ----------------------------------------------- // Read/write memory // -Z(DATA)DATA16_I,DATA16_Z,DATA16_N,TLS16_I,DATA16_HEAP+_DATA16_HEAP_SIZE=0200-02FF -Z(DATA)CODE_I -Z(DATA)CSTACK+_STACK_SIZE# |
上表是256Byte的,如需修改成512Byte,
0200-02FF -》 0200-03FF
修改rom
// ------------------------------------- // Constant data // -Z(CONST)DATA16_C,DATA16_ID,TLS16_ID,DIFUNCT,CHECKSUM=E000-FFDF // ------------------------------------- // Code // -Z(CODE)CSTART,ISR_CODE,CODE_ID=E000-FFDF -P(CODE)CODE=E000-FFDF |
2 输出文件设置
如下图选择 msp430-txt
编译后,会在Debug/Exe下,生成机器指令,如hellow.txt。
设置#include文件夹,PROJDIRPROJDIR 表示当前的工程路径。如下图。
openMSP430 介绍相关推荐
- 简单介绍互联网领域选择与营销方法
在我看来,互联网领域的选择是"安家",而营销方法的不同则表现了"定家"的方式多种多样,只有选对了,"家"才得以"安定". ...
- 常用开源协议介绍以及开源软件规范列表
1. 开源协议介绍 GPL: General Public License,开源项目最常用的许可证,衍生代码的分发需开源并且也要遵守此协议.该协议也有很多变种,不同变种要求会略微不同. MPL: MP ...
- python:Json模块dumps、loads、dump、load介绍
20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...
- pytorch学习笔记(九):PyTorch结构介绍
PyTorch结构介绍 对PyTorch架构的粗浅理解,不能保证完全正确,但是希望可以从更高层次上对PyTorch上有个整体把握.水平有限,如有错误,欢迎指错,谢谢! 几个重要的类型 和数值相关的 T ...
- Python字节码介绍
了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代 ...
- Pytest - 使用介绍
1. 概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1.简单灵活,容易上手,文档丰富: 2.支持参数化,可以细粒度地控制要测试的测试用例: 3.能够支持简单的单 ...
- 遗传算法的简单介绍以及模式定理的简单证明
遗传算法 遗传算法(Genetic Algorithm,GA),最早是由美国的John holland在20世纪70年代提出.算法通过模拟达尔文生物进化论的自然选择以及遗传学机理的生物进化过程来搜 ...
- k8s核心组件详细介绍教程(配超详细实例演示)
本文实验环境基于上篇文章手把手从零开始搭建k8s集群超详细教程 本文根据B站课程云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps学习总结而来 k8s核心组件介绍 1 ...
- Tensorrt一些优化技术介绍
Tensorrt一些优化技术介绍 Figure 1. A quantizable AveragePool layer (in blue) is fused with a DQ layer and a ...
- 网路摄像头技术参数介绍
网路摄像头技术参数介绍 星光级图像传感器 4MP (2592 × 1520) @30fps SmartH.265 / H.265+ / H.265 / SmartH.264 / H.264+ / H. ...
最新文章
- 快节奏的多人游戏同步 - 示例代码和在线演示
- 独家 | 11个Python Pandas小技巧让你的工作更高效(附代码实例)
- 分享:python,限制任意函数,线程的执行时间或根据条件终止.
- ios相机黑边_黑边很碍眼很难看 苹果iPhone6黑边有什么用呢?
- 批量ping 查看主机能否ping通,能否ssh上.md,
- Informatica PowerCenter使用介绍-转载
- Linux用户和HDFS和Hive权限关系
- JAVA——赫夫曼编码-译码器(Huffman Coding)
- 08.15《CEP职业发展规划课》
- Linux C++ 回射服务器
- Makefile--伪目标 (三)
- matlab 直方图修正,matlab直方图修正
- linux中搭建邮件服务器
- LDO + 稳压管的扩压电路试用笔记
- 使用EasyExcel进行百万数据文件导出思路
- css实现文字两端对齐
- SMBLoris windows拒绝服务漏洞
- 雷达杂波matlab,基于MATLAB的雷达杂波建模与仿真研究
- 普元连接mysql_普元平台初始化数据库
- Valgrind 内存管理工具Memcheck 基本使用
热门文章
- QT3D场景快速绘制入门学习
- Only tensors or tuples of tensors can be output from traced functions错误解决
- 技术QA:如何找回丢失的证书模板或将独立CA转换成企业CA?
- 2016年360校招笔试题
- 【Pycharm教程】Pycharm下载安装、配置与测试
- ros学习笔记13——unknown package [sensor_msgs] on search path [{{‘ros_to_deepstream
- cmake依赖ffmpeg库(x264)错误
- java扫雷初级代码_高分求一个运行在Eclipse环境下的java 扫雷游戏的初级代码 越小越好 越短越好 运行就好,就是初级就好了,...
- struts2 国际化 中文乱码英文不乱码问题
- Gym 100015A Another Rock-Paper-Scissors Problem