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. 简单介绍互联网领域选择与营销方法

    在我看来,互联网领域的选择是"安家",而营销方法的不同则表现了"定家"的方式多种多样,只有选对了,"家"才得以"安定". ...

  2. 常用开源协议介绍以及开源软件规范列表

    1. 开源协议介绍 GPL: General Public License,开源项目最常用的许可证,衍生代码的分发需开源并且也要遵守此协议.该协议也有很多变种,不同变种要求会略微不同. MPL: MP ...

  3. python:Json模块dumps、loads、dump、load介绍

    20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...

  4. pytorch学习笔记(九):PyTorch结构介绍

    PyTorch结构介绍 对PyTorch架构的粗浅理解,不能保证完全正确,但是希望可以从更高层次上对PyTorch上有个整体把握.水平有限,如有错误,欢迎指错,谢谢! 几个重要的类型 和数值相关的 T ...

  5. Python字节码介绍

    了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代 ...

  6. Pytest - 使用介绍

    1. 概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 1.简单灵活,容易上手,文档丰富: 2.支持参数化,可以细粒度地控制要测试的测试用例: 3.能够支持简单的单 ...

  7. 遗传算法的简单介绍以及模式定理的简单证明

    遗传算法   遗传算法(Genetic Algorithm,GA),最早是由美国的John holland在20世纪70年代提出.算法通过模拟达尔文生物进化论的自然选择以及遗传学机理的生物进化过程来搜 ...

  8. k8s核心组件详细介绍教程(配超详细实例演示)

    本文实验环境基于上篇文章手把手从零开始搭建k8s集群超详细教程 本文根据B站课程云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps学习总结而来 k8s核心组件介绍 1 ...

  9. Tensorrt一些优化技术介绍

    Tensorrt一些优化技术介绍 Figure 1. A quantizable AveragePool layer (in blue) is fused with a DQ layer and a ...

  10. 网路摄像头技术参数介绍

    网路摄像头技术参数介绍 星光级图像传感器 4MP (2592 × 1520) @30fps SmartH.265 / H.265+ / H.265 / SmartH.264 / H.264+ / H. ...

最新文章

  1. 快节奏的多人游戏同步 - 示例代码和在线演示
  2. 独家 | 11个Python Pandas小技巧让你的工作更高效(附代码实例)
  3. 分享:python,限制任意函数,线程的执行时间或根据条件终止.
  4. ios相机黑边_黑边很碍眼很难看 苹果iPhone6黑边有什么用呢?
  5. 批量ping 查看主机能否ping通,能否ssh上.md,
  6. Informatica PowerCenter使用介绍-转载
  7. Linux用户和HDFS和Hive权限关系
  8. JAVA——赫夫曼编码-译码器(Huffman Coding)
  9. 08.15《CEP职业发展规划课》
  10. Linux C++ 回射服务器
  11. Makefile--伪目标 (三)
  12. matlab 直方图修正,matlab直方图修正
  13. linux中搭建邮件服务器
  14. LDO + 稳压管的扩压电路试用笔记
  15. 使用EasyExcel进行百万数据文件导出思路
  16. css实现文字两端对齐
  17. SMBLoris windows拒绝服务漏洞
  18. 雷达杂波matlab,基于MATLAB的雷达杂波建模与仿真研究
  19. 普元连接mysql_普元平台初始化数据库
  20. Valgrind 内存管理工具Memcheck 基本使用

热门文章

  1. QT3D场景快速绘制入门学习
  2. Only tensors or tuples of tensors can be output from traced functions错误解决
  3. 技术QA:如何找回丢失的证书模板或将独立CA转换成企业CA?
  4. 2016年360校招笔试题
  5. 【Pycharm教程】Pycharm下载安装、配置与测试
  6. ros学习笔记13——unknown package [sensor_msgs] on search path [{{‘ros_to_deepstream
  7. cmake依赖ffmpeg库(x264)错误
  8. java扫雷初级代码_高分求一个运行在Eclipse环境下的java 扫雷游戏的初级代码 越小越好 越短越好 运行就好,就是初级就好了,...
  9. struts2 国际化 中文乱码英文不乱码问题
  10. Gym 100015A Another Rock-Paper-Scissors Problem