问题标签 [msp430]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4372 浏览

c - 嵌入式 C:寄存器访问

假设我们想写地址 say 0xc000,我们可以在 C 中定义一个宏为:

我的问题是,当使用任何微控制器时,考虑一个示例 MSP430,P1OUT 寄存器地址为 0x0021。

但是当我们使用 P1OUT=0xFFFF; // 它为 P1OUT 分配一个值 0xFFFF。

我的问题是它如何写入该地址,例如在本例中为 0x0021。IDE 是 IAR。我在下面定义的头文件 msp430g2553.h 中找到:

我想它正在定义地址,但是要写入或读取的其他宏在哪里。

谁能解释一下 P1OUT 如何在该特定地址位置写入的流程?还要让我知道你在 0x0021u 中是什么意思?

谢谢


到目前为止,我发现的细节是:

在 msp430g2553.h

io430g2553.h 说

有人可以解释上述定义的作用吗?我在 MSP430 IAR C/C++ 编译器中找到的详细信息:

有人知道吗?

0 投票
1 回答
548 浏览

c - 如果我使用超过 25 个元素的数组,则 msp430g2211(启动板)在启动时停止

我在 Linux 环境(Ubuntu,msp430-gcc 4.6.3)中使用 TI Launchpad (msp430g2211)。

我有一个奇怪的问题:当我尝试分配超过固定数量的内存时,微控制器会在启动时停止。

更准确地说:我在 main() 中有一个包含 25 个元素的数组,创建如下:

(为了完整性:

)

一切正常,但如果我尝试使用 30 个(或任何大于 25 个)元素而不是 25 个元素,那么 uC 似乎已经死了。(编译和编程过程中没有错误)

在 TI Wiki 中,我发现了这个,这似乎符合我的经历:

C 启动代码期间 WDT 触发

如果应用程序是用 C 语言编写的,另一个最常见的问题是启动期间的看门狗超时。默认情况下,所有 MSP430 上的看门狗定时器在启动后都设置为活动状态。因此,如果不需要,则必须在应用程序代码开始时关闭 WDT。如果应用程序代码使用 需要在启动期间初始化的大变量,这可能导致看门狗定时器在启动期间已经触发并且代码将永远不会运行。

此问题的解决方案是使用编译器的低级 C 初始化函数,该函数甚至在 C 变量初始化之前就被调用。在 CCS 编译器中,它被称为“int _system_pre_init(void)”,而在 IAR 中,该函数被称为 int __low_level_init(void)。返回值用于确定是否执行 C/C++ 全局数据初始化(返回值 0 绕过 C/C++ 自动初始化)。有关此问题的更多详细信息,请参阅 MSP430 软件编码技术应用报告,第 3.6 章“使用低级初始化函数”。

所以我尝试添加以下函数(为了在分配内存之前停止 WDT):

但问题仍然存在......

我做过的其他测试: - 更改了编译器的版本 - 将数组拆分为 15 个元素中的两个或多个 - 在主函数或“.init3”、“.init1”、“.init7”中停止 WDT

任何想法 ?谢谢你。

编辑:按照建议,我分析了 GCC 输出 ASM 代码(用“##”注释为无效版本):

diff 命令还说:

我不是 ASM 专家,但 WDT 说明似乎在正确的位置。我不明白问题出在哪里...谢谢。

0 投票
1 回答
640 浏览

msp430 - 需要旧版 MSP430 DLL V3 包

最新版本不支持 python-msp-tool,它需要从最新版本的 DLL V3 中删除的 MSP430_Identify() 函数。

所以任何人都可以与我分享你的旧版本 DLL V3 吗?原始 zip 文件的名称应为 slac460c.zip,而不是 slac460.zip。而且版本号是3.2.4.5或者更低,不是3.2.5.4。

非常感谢!

编辑:我只是发现TI已经发布了一些旧版本的MSP430 DLL V3包,但它似乎是用于在所有功能都打包好的windows下开发的。我需要的是可以在Linux下用Makefile制作的纯源代码。

编辑:我已经为 Raspberry Pi 编译了最新版本的 libMSP430.so (3.2.5.4)。为了节省其他人的时间,我在这里发布了文件。

编辑:MSP430_Identify() 可以由以下两个函数代替:MSP430_OpenDevice 和 MSP430_GetFoundDevice。您可以参考 MspDebug 工具,它们使用的是最新的 DLL 驱动程序。

0 投票
1 回答
979 浏览

java - JAVA GUI:在 MSP430 和笔记本电脑之间发送和接收数据

我有一个要求,我需要在笔记本电脑和 MSP 430 设备之间建立通信。界面应该是JAVA GUI。

我有使用 MSP430 的经验和一点 JAVA 知识。

有人可以建议如何进行此操作或为此提供任何可用资源吗?

谢谢

0 投票
0 回答
136 浏览

c - MSP430 msp430-gbd 不调试精细值

我有一个关于 TI 的 MSP430 启动板(1.5 和 MSP430g2553)的问题。

如果我使用以下 hello 工作代码对 mcu 进行编程,则在调试模式下使用 gdb 读取精细值时会遇到一些问题。

  1. gcc 用于通过 mcu 下载代码:$ make prog v=main.c
  2. $ mspdebug rf2500 gdbmsp430-gdb main.elf
  3. 目标远程本地主机:2000

LED 正在闪烁。几个 tiem 后我停止执行并询问局部变量: (gdb) info locals toto = 1 tyty = 10 tata = -577

关于全局变量titi的信息没有问题。tototyty是出现在我的代码中的值,但这是tata的不同值。为什么 ?

不要认为这是gdb的错误......

此致,

通用汽车

0 投票
1 回答
1109 浏览

variables - 如何在 gnu-assembler 中获取小节填充

我在 TI MCU (msp430) 上使用 gnu 汇编器,想在汇编中定义混合对齐的变量;有些是字节对齐的,有些则必须是字(16 位)对齐的。我还需要将一些变量保留为汇编语言模块的私有变量,而其他变量则是通用的(全局变量)。所以,我希望我们 .lcomm 作为默认值,然后在适当的时候使用 .global 覆盖它。

但即使在应用了字节对齐指令之后,在链接 GCC 编译程序期间我也会遇到对齐错误:

ssegLED.c:200:危险重定位:未对齐的地址

而那行只是试图访问应该是字对齐的数据:

如果(旋钮){ ... }

在导致问题的汇编语言模块中,我试图将数据有效地打包到内存中;所以我想使用小节将类似类型的数据分组在一起,这样就不会在不同对齐的数据之间形成漏洞。例如:我想要在默认小节 (0) 中的所有字对齐数据,但未对齐的数据,我想要在小节 1 中。

这是用于定义四个变量的程序集/.s 代码:击键、正交、键状态和旋钮。前三个是字节对齐的,最后一个是字对齐的。

现在,我正在做两件事来防止错位问题;根据 GNU AS 手册,第 0 小节应该放在第 1 小节之前的内存中;因此第 0 节自动开始单词对齐作为默认节;其次,我明确地使用了 .balign 指令。

但它不起作用......并且更改为 .b2align 并不能解决它,等等。

可以通过将另一个字节对齐变量显式添加到第 1 小节变量 keystroke、quadature 和 keystate 来消除错误;使整个小节以单词边界结束;但是由于违规小节的数字较小(0),因此小节(1)的对齐应该没有任何效果....

其次,如果我将所有 .lcomm 更改为 .comm 错误也会消失;但我不知道为什么。

这是怎么回事?我做错了什么?

0 投票
2 回答
2003 浏览

java - 如何在android中分离通过蓝牙接收的数据

我已经修改了 BluetoothChat 示例代码以连接到我已连接到 TI MSP430 开发板上的 UART 的通用蓝牙收发器。我已经建立了通信,可以发送和接收单个字符串并在 TextView 中显示该值。下面是我用来发送压力、temp1 和 temp 2 的 1-3 位数值的 C 代码。它相当简单,而且我正在按设计工作。

现在我想将多条数据发送到 android 设备,并根据它们的数据类型在每个值的单独 TextView 中显示它们。现在我正在测量两个温度传感器和一个压力传感器。我已经毫无问题地将所有数据发送到了 android 设备,但是所有值在 TextView 中只是相互覆盖,因此只显示发送的最后一个字符串。

这是连接到远程设备时运行的代码部分:

这是读取消息并将其显示在 TextView 中的代码:

我似乎无法弄清楚如何对 android 应用程序进行编程以区分字符串之间的区别,这样当我收到 Temp1 字符串时,它会转到 Temp1TextView,而 Temp2 字符串会转到 Temp2TextView 等。我应该添加一个特殊字符作为从 MSP430 发送的第一位,并在 Android 中引用该位以确定它应该去哪里?只是一个想法。

任何帮助深表感谢。

编辑:我想我可以尝试将 int 转换为字符串,然后使用标记器将其分隔,然后将其转换回 int。但是,应用程序现在在通过蓝牙接收数据时崩溃。这是我用来转换它的代码。知道为什么它可能会崩溃吗?

这是崩溃中的 logcat:

0 投票
1 回答
711 浏览

msp430 - 使用笔记本电脑控制 MSP430 PWM

我编写了一个代码,该代码从笔记本电脑获取两位数并将 PWM 占空比更改为该数字。这是我需要通过 UART 控制电机速度的更大要求的一部分。

void PWM(uint8_t duty_cycle) 函数的问题在于,它第一次在 P1.6 生成正确的 PWM,接下来如果给定一个值,它会将 PWM 更改为该 DC,但我无法返回到较低的 DC。

代码中的第一个 2 个 PWM 函数更改为正确的占空比 PWM(5)、PWM(15),然后其余的 PWM 值不会产生所需的占空比。

我无法解决我哪里错了,任何人都可以帮忙吗?

谢谢

0 投票
2 回答
86 浏览

c - 不知道这行代码在c中做了什么

我无法弄清楚<<这行代码中的作用。这是干什么用的?

0 投票
2 回答
7985 浏览

msp430 - 如何在 Mspgcc 中声明中断处理程序 (ISR)?

在 mspgcc 中声明中断处理程序的首选方法是什么?