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.

[参考译文] MSP430F67791A:我想在 MSP430F67791A 中使用 LPM 3.5模式

Guru**** 2513185 points
Other Parts Discussed in Thread: MSP430F67791A, MSP430F6779

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1006638/msp430f67791a-i-want-to-use-lpm-3-5-mode-in-msp430f67791a

器件型号:MSP430F67791A
主题中讨论的其他器件: MSP430F6779MSPWAREMSP430WARE

您好!

你好。 我有一位客户正在处理 MSP430F67791A 的编码问题、请参阅下面他的问题。 非常感谢。

我尝试研究和编辑 tidc620a 中给出的 MSP430F6779_AUX_11.c

请检查函数"EnterLPM35()"。 根据数据表的读数、设置 PMMREGOFF 位后、内核电压必须测量0V。 对吧? 但我的问题是、在关闭主电源后、我仍然可以在 Vcore 上测量1.5V、因此我假设控制器未进入 LPM3.5模式

#include

//用于显示 LCD 字符的查找表

const unsigned int LCD_Char_Map_Top[]=

BIT3|BIT2|BIT1|BIT0|BIT7|BIT6、//"0"或"O"
位2|BIT1、//"1"或"I"
BIT3|BIT2|BIT0|BIT7|BIT4、//'2'或'Z'
BIT3 | BIT2 | BIT1 | BIT0|BI5、//'3'
Bit2|BIT1|BIT6|BIT5、//'4'或'y'
BIT3|BIT1 |BIT0|BIT6|BIT4、//'5'或'S'
BIT3|BIT1|BIT0|BIT7|BIT6|BIT4、//'6'或'b'
BIT3 | BIT2 | BIT1、//'7'
BIT3|BIT2|BIT1|BIT0|BIT7|BIT6|BIT4、//"8"或"B"
BIT3|BIT2|BIT1 |BIT0|BIT6|BIT4、//'9'或'g'
};

const unsigned int LCD_Char_Map[]=

位2 |位3 |位4 |位5 |位6 |位7、//"0"或"O"
Bit 5 | BIT6、//'1'或'I'
BIT0 | BIT1 | BIT3 | BIT4 | BIT6 | BIT4、//'2'或'Z'
BIT0 | BIT1 | BIT4 | BIT4 | BIT6 | BIT4、//'3'
BIT0 | BIT1 | BIT2 | BIT4 | BIT6、//'4'或'y'
BIT0 | BIT1 | BIT2 | BIT4 | BIT4 | BIT2 | BIT7、//'5'或'S'
BIT0 | BIT1 | BIT2 | BIT3 | BIT4 | BIT4 | BIT4 | BIC7、//'6'或'b'
Bit 5 | BIT6 | BIT4、//'7'
BIT0 | BIT1 | BIT2 | BIT3 | BIT4 | BIT4 | BIT6 | BIT2、//"8"或"B"
BIT0 | BIT1 | BIT2 | BIT4 | BIT4 | BIT6 | BIT4、//'9'或'g'
};

void Board_LPM (void);
void EnterLPM35 (void);

#include

int LPM0_enter=0、LPM35_enter=0;
int i=0、RESET_SOURCE=0、RESET_SOURCE1=0;
int srcLo、srcHi;

void main (void)

WDTCTL = WDTPW | WDTHOLD;//停止 WDT

RESET_SOURCE=SYSRSTIV;

UCSCTL6 =(UCSCTL6 | XT1DRIVE_3);//针对 XT1启动的最高驱动设置
while (SFRIFG1和 OFIFG)

UCSCTL7 &=~(DCOFFG | XT1LFOFFG | XT2OFFG);/*清除 OSC 故障标志*
SFRIFG1 &=~OFIFG;/*清除 OFIFG 故障标志*/

UCSCTL6 =(UCSCTL6 &~(XT1DRIVE_3));//将驱动降低至较弱的状态*/

if (RESET_SOURCE1 = 0x08)//刚退出 LPM3.5模式时的情况、这会导致复位。 (但控制永远不会出现在这个 if()内。)
{//从 LPM3.5唤醒时、重新启动
PMMCTL0_H = PMMPW_H;//打开 PMM
// PM5CTL0 &=~LOCKIO;//清除 LOCKBAK 和使能端口
PMMCTL0_H = 0x00;//关闭 PMM

P1DIR &=~(BIT0);//将 P1.0设置为输入
P1IE |= BIT0;// P1.0中断被启用
P1IES &=~BIT0;// P1.0高/低边沿
P1IFG &=~BIT0;

PMMCTL0_H = PMMPW_H;
SVSMHCTL &=~SVSMHRRL_7;
SVSMHCTL |= SVSMHRRL_4;
AUXCTL0 = AUXKEY;
AUX2CHCTL = AUXCHKEY | AUXCHC_1 | AUXCHV_1 | AUXCHEN;
AUX3CHCTL = AUXCHKEY | AUXCHC_1 | AUXCHV_1 | AUXCHEN;
AUXCTL2 |= AUX0LVL_6 + AUX2LVL_5;
AUXCTL1 |= AUX2PRIO;
AUXIE |=(AUX0SWIE | AUX2SWIE | AUX2DRPIE);
AUXCTL0_L 和=~LOCKAUX;
PMMCTL0_H = 0;

//设置 LCD
对于(I = 0;I < 20;I++)

LCDMEM[i]= 0;
LCDBMEM[i]= 0;//清除闪烁段存储器


LCDCCTL0 = LCDDIV_31 | LCDPRE_1 | LCD4MUX | LCDON;
LCDCVCTL = LCDCPEN | VLCD_2_60;
LCDCPCTL0 = 0xFFFF;
LCDCPCTL1 = 0xFFFF;
LCDCPCTL2 = 0xFFC3;
LCDCCPCTL = 0xFFFF;

RTCCTL0 = RTCKEY;
RTCCTL0_L |= RTCRDYIE;//启用 RTC 时间事件、
RTCCTL1 |= RTCBCD | RTCHOLD;// RTC 使能 BCD 模式、RTC 保持
RTCCTL1 &=~(RTCHOLD);//启动 RTC
RTCCTL0_H = 0;



_bis_SR_register (GIE);//启用中断

//Print "RS:xx"、其中 xx 是最后一次复位的源。
LCDM17=BIT5 | BIT7 | BIT4;
LCDM16=BIT0| BIT1 | BIT3 | BIT5 | BIT6;
LCDM15= LCD_Char_Map_Top[RESET_SOURCE >>4];
LCDM14= LCD_Char_Map_Top[RESET_SOURCE 和0xF];


//处理发生复位并从 AUXVCC2运行的情况。
IF (AUXCTL0和 AUX0SW)

LPM0_ENTER=0;
LPM35_ENTER=0;

否则(AUXCTL0和 AUX2SW)

Board_LPM ();
LPM0_ENTER=0;
LPM35_ENTER=1;
AUXCTL1 |= AUX0MD;
AUXCTL1 &=~(AUX0OK);


while (1)

if (LPM35_ENTER=1)

EnterLPM35();//输入 LPM3.5。 RTCRDY 中断将不会被触发。
//与 RTCOFIE、RTCEVIE、RTCAIE 中断不同、这个中断不能从 LPM3.5唤醒 RTC
//但是、RTC 仍在 LPM3.5中计数、尽管您看不到它。



void EnterLPM35 (void)

PMMCTL0_H = PMMPW_H;//打开 PMM 寄存器进行写入
PMMCTL0_L |= PMMREGOFF;//并设置 PMMREGOFF (该位不起作用、我相信我可以在 Vcore 为主电源供电时测量1.52v)
_bis_SR_register (LPM4_bits+ GIE);//使用中断进入 LPM3.5模式
__no_operation();//已启用


#pragma vector=AUX_Vector
_interrupt void aux_interrupt (void)

开关(__evo_in_range (AUXIV、16))

AUXI_NONE 案例:
中断;
案例 AUXI_AUXSWNMIFG://*全局(不)可屏蔽电源切换中断标志*
中断;
案例 AUXI_AUX0SWIFG:/*切换到 DVCC 中断标志*
_BIC_SR_REGISTER_ON_EXIT (LPM4_BITS);//退出 LPM0模式(如果处于此模式)
__no_operation();
PMMCTL0_H = PMMPW_H;//打开 PMM
PMMCTL0_L = 0x08;//触发软件上电复位
PMMCTL0_H = 0x00;
LPM35_ENTER=0;
中断;
案例 AUXI_AUX1SWIFG:/*切换到 AUXVCC1中断标志*/
中断;
案例 AUXIV_AUX2SWIFG:/*切换到 AUXVCC2中断标志*/
Board_LPM ();
LPM35_ENTER=1;//当切换到 AUXVCC2时、进入 LPM3.5模式
中断;
案例 AUXI_AUX1DRPIFG://* AUXVCC1低于阈值中断标志*
中断;
案例 AUXI_AUX2DRPIFG://* AUXVCC2低于阈值中断标志*
中断;
案例 AUXI_AUXMONIFG:/*电源监控器中断标志*
中断;


#pragma vector=RTC_Vector // RTC 中断服务例程
_interrupt void RTC_ISR (void)

开关(__evo_in_range (RTCIV、16))

案例 RTCIV_NONE://无中断
中断;
案例 RTCIV_RTCOFIFG:// RTCOFIFG
中断;
案例 RTCIV_RTCRDYIFG:// RTCRDYIFG


LCDM8=LCDM4=0x04;//在时间中显示两个“:”
LCDM3 = LCD_Char_Map[RTCHOUR & 0xF];//显示实际时间
LCDM1 = LCD_Char_Map[RTCHOUR >> 4];
LCDM7 = LCD_Char_Map[RTCMIN & 0xF];
LCDM5 = LCD_Char_Map[RTCMIN >> 4];
LCDM11 = LCD_Char_Map[RTCSEC & 0xF];
LCDM9 = LCD_Char_Map[RTCSEC >> 4];
中断;
案例 RTCIV_RTCTEVIFG:// RTCEVIFG
__no_operation();
中断;
案例 RTCIV_RTCAIFG:// RTCAIFG
__no_operation();
中断;
案例 RTCIV_RT0PSIFG:// RT0PSIFG
中断;
案例 RTCIV_RT1PSIFG:// RT1PSIFG
中断;
案例16:中断;//保留
默认值:break;


void Board_LPM (void)

//端口配置

P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;P5OUT = 0x00;P6OUT = 0x00;
P7OUT = 0x00;P8OUT = 0x00;P9OUT = 0x00;P10OUT = 0x00;P11OUT = 0x00;PJOUT = 0x00;
P1DIR = 0xFE;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;P5DIR = 0xFF;P6DIR = 0xFF;
P7DIR = 0xFF;P8DIR = 0xFF;P9DIR = 0xFF;P10DIR = 0xFF;P11DIR = 0xFF;PJDIR = 0xFF;

LCDCCTL0 &=~LCDON;//禁用时钟

//此端口中断会将芯片从 LPM3.5中唤醒。
// P1DIR &=~(BIT0);//将 P1.0设置为输入
P1IE = BIT0;// P1.0中断被启用
P1IES = 0;// P1.0高/低边沿
P1IFG = 0;

#pragma vector=Port1_vector
_interrupt void Port_1 (void)

P1IFG = 0;// P1.0 IFG 清零

这是"tidc620a"中给出的"MSP430F6779_AUX_11.c"的编辑版本

我当时假设微控制器没有从2个观察中进入 LPM3.5。 一个是断电后 Vcore 不变为0V。 接下来、我在辅助中断中添加了'Board_LPM ();'、现在显示为实时且正在触发 RTCIV_RTCRDYIFG

此致、

Ray Vincent

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

    您可以参考代码示例 :https://dev.ti.com/tirex/explore/node?node=AI-OQ4hSVaJ9EXbY.y4afg__IOGqZri__LATEST

    并检查 Vcore 是否会变为0V。 如果像 LCD 这样的外设仍然使用 LPM3.5中不允许的时钟。 器件将不会进入 LPM3.5。

    您还可以测试电流假设。 更直接地了解它是否进入 LPM3、5。

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

    您好、伊斯天、

    你好。 客户方面的链接无法与我一样正常工作。 请帮助您了解详情。 非常感谢。

    此致、

    Ray Vincent

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

    连接到 Resource Explorer 时出错。 检查互联网连接或稍后重试。

    这是我们遇到的错误。 谢谢。

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

    我想客户可以在 MSPware (C:\ti\MSP430Ware_3_80_09_03\examples\devices\MSP430F5xx_6xx\MSP430F677x (1) A_MSP430F676x (1) A_MSP430F674x (1) A_Code_examples\C)下找到它

    名称是 msp430f677xA_rtc_02.c

    我出差。 您能否帮助客户自行调试?

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

    您好、伊斯天、

    我已经在我们这边尝试过它、但它也无法访问该链接。

    此致、

    Ray Vincent

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

    尊敬的 Ray:

    有关第一个链接:  https://dev.ti.com/tirex/explore/node?node=AI-OQ4hSVaJ9EXbY.y4afg__IOGqZri__LATEST

    这是 Explorer 上的代码。

    对于第二个链接: C:\ti\MSP\MSP430Ware_3_80_09_03\examples\devices\MSP430F5xx_6xx\MSP430F677x (1) A_MSP430F676x (1) A_MSP430F674x (1) A_Code_examples\C

    它是 MSP430Ware 中的离线代码。 只是一个参考。 您应该先安装 MSP430ware。