This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP432P401R:内存中没有占用空间

Guru**** 2595805 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/637378/msp432p401r-not-enaugh-space-in-memory

部件号:MSP432P401R

您好!

我想存储一组3.2万个uint_16类型的细胞。 (ADC值)。 我看到最大SRAM空间是64 KB ,所以我知道2B*3.2万超出了该内存空间。 但是,我看到MSP432P401R具有256 KB 闪存,我想将阵列放入此内存中(我看到每个块大小是4 KB ,然后4*8= 32 KB ,它应该适合我的阵列)。

这是正确的方式吗? 在他的案例中,我该怎么做? 因为我试图声明我的数组  

uINT_fast16_t myArray[3.2万] 

在通话之后

MAP_FlashCTL_programMemory((void*)myArray,(void*) 0x....,3.2万) 

但在编译时,编译器提示我:“程序将不适合可用内存”(我还尝试使用较少的单元来适应SRAM,写入闪存的操作也很顺利)。

提前感谢您的参与,
此致,

Mattia Ducci

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Mattia,

    将数据写入闪存并不容易。 您的定义假定内存位于SRAM空间中,这是太小的。 您必须定义一个它取决于您的用例如何存储数据。

    您是否知道ADC数据闪存中的编程速度?
    如果您使用的是闪存,则将其视为存储器。 您必须先将其擦除,然后才能使用它。 写入内存也需要一段时间。

    我不确定在您的用例中是否可以做到这一点。

    此致,

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    外部EEPROM也可能是另一种解决方案。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢

    在我的项目中,我想对ADC值进行采样并通过UART发送。

    虽然在这篇文章中我要求批量发送大量样品,但我希望实时发送每个样品,但似乎UART太慢,即使我不明白为什么。

    我将SMCLK设置为48MHz

    Flashctl_setWaitState(flash_BANK0, 2);
    Flashctl_setWaitState(flash_Bank1, 2);
    map_PCM_setCoreVoltageLevel(PCM_VCORE1);
    cs_setDCOCenteredFrequency (CS_DCO_Frequency_48); 

    我将它分配给ADC时钟(在测试SMCLK为48MHz且功能 为CS_getSMCLK()之后)

    MAP_ADC14_INITModule (ADC_CLOCKSOURCE_SMCLK,ADC_PREDIVIDER_1,ADC_DIVIDER_1,0); 

    我将ADC样本触发器配置为来自TIME_A  

    MAP_ADC14_setSampleHoldTrigger (ADC_TRIGG_SOURCE1,FALSE); 

    使用此参数化

    /* Timer_A连续模式配置参数*/
    const Timer_a_UpModeConfig upModeConfig =
    {
    Timer_A_CLOCKSOURCE_SMCLK,
    Timer_a_CLOCKSOURCE_diver_1,
    3000,
    Timer_a_TAIE_INTERRUST_DISABLE, //禁用计时器ISR,mi serve x ADC
    Timer_a_CCIE_CCR0_interrupT_disable,//禁用CCR0
    Timer_a_DO清除 //清除计数
    器};/*
    
    Timer_A比较配置参数*/
    const Timer_a_CompareModeConfig compareConfig ={
    
    Timer_a_CAPTURECOMPare_register_1, //使用CCR1
    Timer_a_CAPTURECOMPare_interrupt_disable,//禁用CCR中断,mi serve x ADC
    Timer_a_OUTPUTMODE_SET_RESET, //切换输出位
    3000 //CCR1=CCR0
    }; 

    考虑到我想在16kHz -> 48Mhz / 3000 = 16kHz时进行采样,认为ADC转换是每秒16.000 次是正确的吗?

    我使用以下链接中建议的参数配置了UART模块:  

    //48MHz时钟,11.52万波特
    率连接eUSI_UART_Config uartConfig ={
    
    EUSCI_A_UART_CLOCKSOURCE_SMCLK, // SMCLK时钟源
    26, // BRDIV = 78
    1, // UCXBRF = 2
    0, // UCXBRS = 0
    EUSCI_A_UART_NO_PARity, //不奇偶校验
    EUSCI_A_UART_LSB First, // MSB优先
    EUSCI_A_UART_ON_STOP_BIT, //一个停止位
    EUSCI_A_UART_MODE, // UART模式
    EUSCI_A_UART_ORTS_Ooversampling_BAUDRATE_generation // Oversampling
    }; 

    在main()中,我有这样的内容:

    而(1){
    sprintf (str,"%x",myArray[index]);
    MAP_UART_HESRData(EUSI_A0_base, str[0]);
    MAP_UART_EXTData(EUSI_A0_base, str[1];
    MAP_UART_EXTData(EUSI_A0_base, str[2]);
    MAP_UART_EXTData(EUSI_A0_base, str[3]);
    MAP_UART_EXTData(EUSI_A0_base, str[4]);
    MAP_UART_ESDLData(EUSI_A0_base,'\n');
    } 

    我认为,使用48Mhz与16kHz的ADC,会给我足够的时间在两个ADC采样之间发送我的adcValue (存储在myArray中)。

    我弄错了吗?

    谢谢!

    此致,

    Mattia Ducci

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Mattia,

    两件事。 首先,确保您使用的是Red Launchpad或Rev C/D芯片或更高版本。 黑色LaunchPad包含不再受支持的旧实验芯片。

    请参阅 www.ti.com/.../slaa700的第3部分

    如果您是,您可以在此处获取新的启动板: www.ti.com/.../msp-exp432p401r

    第二个。 ADC只能计时为25MHz。 尝试将ADC的时钟频率为48MHz超出了规范。

    在Rev C/D设备上,您可能需要检查等待状态设置:根据数据表的Section 5.8 ,您可以使用1等待状态而不是2,除非您使用读取模式读取边距0,1,程序验证或擦除验证。

    根据表5-36,您不能将UART的时钟频率设为48MHz。 最大值为24MHz。 此外,在调整时钟时,请确保调整UCBRS,UCBRF和BRDIV值。

    根据Table 5-28,您不能将ADC的时钟频率为48MHz。 ADC模块可以处理的最大ADC时钟为25MHz。

    从这里开始,我将进行这些更改,并重新思考您的应用方法。 请查看ADC,计时器和UART示例,以更好地熟悉这些IP。 我现在要关闭此帖子,但随着您的应用程序的发展,请随时继续提出问题!!

    dev.ti.com/.../
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回答。 我有一个黑色的洗涤垫..
    现在,我将尝试调整我的时钟。 但是如果我继续使用48MHz时钟会发生什么情况? 这对硬件是否有危险?

    此致,
    Mattia Ducci
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Mattia,

    外围设备的48MHz时钟超出规格,我们不保证操作,并且可能会损坏硬件。 在确定可将MCU设置为什么设置时,请始终参考数据表。