标签: msp430

单人为emdedded

我是C#开发人员,我对MSP430等芯片的嵌入式开发很感兴趣.请提供一些工具和教程.Mono框架非常强大且可定制,单声道特定示例将更有帮助.

embedded mono msp430

3
推荐指数
1
解决办法
764
查看次数

FreeRTOS 配置TICK_RATE_HZ

我使用的是带有 5.4 版 FreeRTOS 的 MSP430f5438。

我有一个有趣的问题,我无法弄清楚。

基本上,当我将 configTICK_RATE_HZ 设置为不同的值时,LED 闪烁得更快或更慢;它应该保持相同的速率。我将 configTICK_RATE_HZ 设置得越高,它闪烁得越慢,而当我将 TICK_RATE 设置得越低时,它就会闪烁得越快。

vTaskDelayUntil( &xLastFlashTime, xFlashRate ); 无论 configTICK_RATE_HZ 是多少,LED 应该每秒只闪烁一次。我逐步检查了 xFlashRate 以进行确定。它总是 = configTICK_RATE_HZ。代码:

xFlashRate = ledFLASH_RATE_BASE;//my flash base rate is 1000ms
xFlashRate /= portTICK_RATE_MS; //so xFlashrate = whatever configTICK_RATE_HZ equals

/* We need to initialise xLastFlashTime prior to the first call to vTaskDelayUntil().*/ 
xLastFlashTime = xTaskGetTickCount();
for(;;) { 
vTaskDelayUntil( &xLastFlashTime, xFlashRate ); vParTestToggleLED( uxLED ); 
flashled();//this should happen every 1 second.
}
Run Code Online (Sandbox Code Playgroud)

当我将 configtick_rate_hz 设置为 1000 …

c rtos msp430 iar freertos

3
推荐指数
1
解决办法
1万
查看次数

MSP430装配说明

我试图了解这些指令对MSP 430处理器的作用:

(1) MOV.w  #0x0055,R5
(2)   BIC.w  #0xFFEE,R5
(3)   BIS.w  #0x1144,R5
Run Code Online (Sandbox Code Playgroud)

我无法找到解释汇编指令的内容,并且很想知道每条指令后这些指令的作用以及存储在r5寄存器中的内容.有人能解释一下吗

assembly processor msp430

3
推荐指数
2
解决办法
2万
查看次数

".bss"命令在MSP430汇编代码中做了什么?例如,".bss beep_cnt,2"对变量beep_cnt2做了什么?

".bss"命令在MSP430汇编代码中做了什么?例如,".bss beep_cnt,2"对变量beep_cnt2做了什么?

.bss    beep_cnt,2              ; beeper flag
.bss    delay_cnt,2             ; delay flag
Run Code Online (Sandbox Code Playgroud)

assembly msp430

3
推荐指数
1
解决办法
2502
查看次数

将带符号的单精度浮点数舍入到最接近的整数的有效方法是什么?

float input = whatever;
long output = (long)(0.5f + input);
Run Code Online (Sandbox Code Playgroud)

这对于我在 MSP430 上的应用程序来说是低效的,使用编译器提供的浮点加法支持库。

我在想,这种特殊的“最近整数”舍入可能有一个聪明的“技巧”,避免了简单的浮点加法,也许是通过直接“位旋转”浮点表示,但我还没有找到这样的。任何人都可以建议这样的技巧来舍入 IEEE 754 32 位浮点数吗?

floating-point rounding msp430

3
推荐指数
1
解决办法
591
查看次数

C - 如何从设备端的串口接收(z1 mote)

我正在尝试使用 与直接连接到我的 PC 的 z1 mote 进行通信pyserial。我想要做的是写入节点,并在收到命令后,节点应回复当前的温度读数,例如。

Python端可以是这样的(iinm)

import serial
ser = serial.Serial(0)  
ser.write("hello")      # the mote will receive the message and do something 
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在使用 C 的 z1 mote 端接收消息。是否有特殊的方法来接收命令,还是我必须创建自己的方法?

任何提示和提示都将不胜感激。

msp430 contiki

3
推荐指数
1
解决办法
1871
查看次数

__even_in_range(UCA0IV,0x08)是什么意思

我从TI的MSP430FR57xx的UART示例代码中找到了这部分。我不明白这__even_in_range(UCA0IV,0x08)是什么意思?

#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
    switch(__even_in_range(UCA0IV,0x08))
    {
    case 0:break;                             // Vector 0 - no interrupt
    case 2:                                   // Vector 2 - RXIFG
        while (!(UCA0IFG&UCTXIFG));           // USCI_A0 TX buffer ready?
        UCA0TXBUF = UCA0RXBUF;                // TX -> RXed character
        break;
    case 4:break;                             // Vector 4 - TXIFG
    default: break;
    }
}
Run Code Online (Sandbox Code Playgroud)

msp430 interrupt-handling

3
推荐指数
1
解决办法
768
查看次数

将浮点值存储在 uint32_t 指针中

我想在我的 TI MSP430 微控制器的 FRAM 寄存器中存储一些浮点数据并且有一些问题。

我不知道我怎么能做到这一点。

使用普通整数变量没有问题。

普通整数变量:

void main()
{
    uint32_t value = 25;
    uint32_t framPtr = 0xD000;

    FRAMC_write_uint32_t(value, (uint32_t*)framPtr);
}

void FRAMC_write_uint32_t(uint32_t value,
                          uint32_t *framPtr)
{
    *framPtr = value;
}
Run Code Online (Sandbox Code Playgroud)

但是对于浮点值它不起作用。我试图将函数内的值更改为浮动,但没有结果。

这是我的浮动数据:

    float value = 1.25;
    uint32_t framPtr = 0xD000;
Run Code Online (Sandbox Code Playgroud)

使用此功能不起作用:

void FRAM_write_float(float value,
                      uint32_t *framPtr)
{
    *framPtr++ = (float)value;
}
Run Code Online (Sandbox Code Playgroud)

它在我的记忆库中保存了数据1.40129846e-45 (DEN) (HEX: 0x00000001)

我希望有人能帮助我解决我的问题。 谢谢!

c msp430

3
推荐指数
1
解决办法
6878
查看次数

易失性关键字 - MSP430

我正在尝试使 TI MSP430 Launchpad 板上的 LED 闪烁。我有两段代码。一个有效,而另一个则无效。唯一的区别是工作版本中包含 volatile 关键字。为什么程序执行需要这个关键字?

这段代码有效...

void main(void) {
    WDTCTL = WDTPW | WDTHOLD;           // Stop watchdog timer

    // Configure Port Directions
    P1DIR |= 0x01;                      // 0000 0001

    volatile unsigned int i;

    for(;;)
    {
        P1OUT ^= 0x01;                  // Set P1.0 LED on
        for (i = 20000; i > 0; i--);    // Delay
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然这段代码不...

void main(void) {
    WDTCTL = WDTPW | WDTHOLD;           // Stop watchdog timer

    // Configure Port Directions
    P1DIR |= 0x01;                      // 0000 …
Run Code Online (Sandbox Code Playgroud)

c msp430

2
推荐指数
1
解决办法
1706
查看次数

16位int机器(MSP430)和32位int机器(ARM CORTEX)的减法结果不同

当下面的代码针对像MSP430微控制器这样的16位整数机运行时,s32得到65446.

#include <stdint.h>

uint16_t   u16c;
int32_t    s32;

int main()
{
    u16c = 100U;
    s32  = 10 - u16c;
}
Run Code Online (Sandbox Code Playgroud)

我的理解是10 - u16c获取unsigned int的隐式类型提升.数学上10 - u16c等于-90.但是如何将负数表示为unsigned int呢?当-90被提升为unsigned int时,是否意味着忽略了数字的符号?

让我们假设,数字的符号被忽略.
90的二进制表示是00000000 01011010.当这被分配给s3232位宽的有符号整数变量时,转换是如何发生的?

为了s32等于65446,90必须采用2的补码.那就是00000000 10100110.

我不了解s32成为65446 的过程.

在像ARM这样的32位宽整数机器中,s32是-90,这是正确的.

要修复在16位整型机这种情况下,需要的类型转换(int16_t)u16c.这是如何解决这个问题的?

添加s32了IAR Workbench(右下角)所示的hexa数据表示.它显示s32成为0x0000FFA6.因此,对于MSP430,从无符号16位转换为带符号32位的机器实现,它只是预先设置16 0位.

在此输入图像描述

c embedded arm msp430 cortex-m

2
推荐指数
1
解决办法
492
查看次数