Quantcast
Channel: MSP low-power microcontroller forum - Recent Threads
Viewing all 22733 articles
Browse latest View live

MSP432E401Y: XDS110 Firmware reflashing

$
0
0

Part Number:MSP432E401Y

Hi,

    I have a MSP432E401Y Launchpad, with XDS110 debug interface. I reflashed the bootloader for XDS by mistake, and now I am not able to proceed with any board debug.

I had used the following command to reflash XDS bootloader -

xdsdfu -m
xdsdfu -b bootloader.bin -r

I gave a wrong bootloader file and now it doesn't boot.

Is there a way to reflash the complete firmware ?


MSP432E401Y: The current Consumption is high during sleepmode /deepsleep mode/hibernation mode.

$
0
0

Part Number:MSP432E401Y

Hello,

I am trying to put the MCU to hibernation mode using the example code "hibernate_vdd3on_wakepin"  and measured the current using power supply of 3.3v , its measuring 20mA ,whn MCU is in sleep/hibernate mode.

Can I know how to pulldown the current consumption completely that draws only  very few micro amps during sleepmode..

Even whn I tried with "sysctl_deepsleepmode_gpiowake" ,its drawing same 20mA current.

Can I please know how to reduce it and whr I am doing wrong..

According to the DataSheet  it should be 1.04 - 2.14uA..

Thank you!!

MSP430F47187: Issue in power calibration at 0.5lag.

$
0
0

Part Number:MSP430F47187

Hi,

we are using three phase capacitive power supply with MSP430F47187.my issue is that when we do calibration in UPF side ie 1.00 upf then meter is calibrated in upf but when are giving 0.5 lag to meter then accuracy is showing 100% .i am following the capacitive supply as given in ti pdf .voltage sensing and current sensing is also same as given reference by ti but problem occuring in 0.5 lag. please revert what is the issue in hardware.

MSP430F2272: small JTAG interface

$
0
0

Part Number:MSP430F2272

I'm in the process of creating a small archival tag using the MSP430f2272 microcontroller and there is a restraint on the size of the PCB. 

I am looking for some type of JTAG headers that are much smaller of the legacy ones. Does someone have any tips on getting started there? Some reference designs would help greatly

I'm attaching an image of what I am kinda looking for. I am currently using the MSP-FET debugger

Thanks.

CCS/MSP430G2553: PWM not working when debugger is removed

$
0
0

Part Number:MSP430G2553

Tool/software: Code Composer Studio

Hi,

I am working on msp430G2553 . I am producing PWM signal on P2.5 , it works properly when debugger is connected . But when debugger is removed , the pwm signal is missing . Why is it so ?

MSP430FR2311: Implementing I2C Stuck Bus clear on the slave side

$
0
0

Part Number:MSP430FR2311

I'm using an MSP430 as an I2C slave.  It seems that it would be easier to clear a stuck bus on the slave end rather than doing the bus clear from the master end and going through all the pin reading, reconfigure the i2c pins to gpio, clocking out until the bus clears, etc.  On the slave side it seems you could just monitor the state machine and make sure whenever there is an i2c start interrupt you start counting using a timer. You also give the transaction a unique ID and then use a counter that checks that unique id.  If the counter gets to some specified timeout (lets say 1 second) and the unique ID hasn't change then, reset the peripheral and state machine which should clear the stuck bus.

Thoughts?

CCS/MSP430F5529: Looking for a Fuel Gauge for my MSP430F5529LP

$
0
0

Part Number:MSP430F5529

Tool/software: Code Composer Studio

Hi TI team, 

Please if you can suggest any Fuel Gauge composant or development kit with a source code or something similar to communicate with MSP430F5529.
I need it to read the state of charge of the battery.  

I found many exemples like (BQxx ....) but with all of  it I can't  have any result .

CCS/MSP430FR6047: Updating the USS DEMO project with latest USS software library?

$
0
0

Part Number:MSP430FR6047

Tool/software: Code Composer Studio

Hello,

I have an UltrasonicWaterFR6047_01_40_00_01 application and I want to update the USSLib of the latest version. What is the procedure I should follow to update the USSLib in my Demo application.

Regards,

Jadhav


TIDM-1019: Calibration offset applied without the slope when checking the 'Adv Calibration Table' checkbox.

$
0
0

Part Number:TIDM-1019

I am working on using the latest USS design center GUI and I have been successful in getting the code to compile after running thru the calibration process and creating the new header files. 

Additionally, per your calibration flow diagram (provided in a different thread), I have commented out the gUssSWConfig.algorithmsConfig->numOfMeterCalibrationRanges  to zero, in the USSLibGUIApp_Init() function inside of USSLibGUIApp.c file.  This was also part of the compile I performed before programming the eval board.

So, the result of all of this is that the meter appears to run without the 'Adv. Calibration Table' checkbox checked (although the flow rates are not accurrate at some of the sample points because our meter has some non-linear behavior).  When I check the box for 'Adv Calibration Table' the VFR drops to the offset values for the flow range that the meter is running in...

In my application, my meter runs from 0 to 33 GPM.  I have three linear ranges:

The first range is: 0 to 2.5 GPM where the slope is around 0.92 and the offset is -0.04

The second range is: 2.5 to 10 GPM where the slope is around 0.96 and the offset is -0.3

The third range is 10 to 33 GPM where the slope is around 1.02 and the offset is -0.5

The GUI shows -0.5 when I run the flow thru the meter at 20 GPM.

The GUI shows -0.3 when I run the flow thru the meter at 5.0 GPM.

The GUI shows - 0.04 when I run the flow thru the meter at 1.0 GPM

In my testing it appears that following your process the meter only outputs the offset and not the VFR when the 'Adv Calibration Table' checkbox is checked.

Please provide your thoughts ASAP.  I have tried to mine thru the source code and determine what is going on, but the only thing I can see is that the values are being returned that way from the USS SW lib function calls.

Any advice would be great.

Regards,

Edwin

CCS/MSP430F6779A: Custom Boot loader Design Help

$
0
0

Part Number:MSP430F6779A

Tool/software: Code Composer Studio

Hi,

I am trying to build a custom boot loader for MSP430f6779a device, based on  MSPBSL_CustomBSL430  1_01_00_00 source in CCS ( Version: 7.4.0.00015 ). In the BSL430_Low_Level_Init.asm , I have made necessary modifications in BSL Protect function to switch the controller to BSL mode based on pin P2.2 (kindly confirm wether i can write like that). Unfortunately the BSL is not working as expected., also noted the section .JTAGLOCK_KEY is not placed in the output file.

For your reference iam attaching  zip containing BSL430_Low_Level_Init.asm,BSL_lnk_msp430f6779a.cmd ,output.map and output .txt file. Please help.

Regards

Sreekanth MK(Please visit the site to view this file)

CCS/MSP430F6779A: RTC freezes when power is cut off and resumes when power is backed up.

$
0
0

Part Number:MSP430F6779A

Tool/software: Code Composer Studio

Hi Everyone,

I am using MSP430F6779A for my project in which i am facing issue with RTC time. When power is cutoff my RTC freezes the last time and continues to run when power is restored. I need my RTC to continue running even during powerfail. I have connected battery on VBAT and i can see the crystal oscillating on my scope which ensures no fault in my hardware. I found one thread running on this forum relevant to my question e2e.ti.com/.../583815           . I have tried the answer mentioned in the same thread but my problem remains same. I tried with RTCLOCK and RTC_C also but of no use. I believe i have tried most of the online help online in this regards but could not solve my problem. I used MSP430Ware code to initialise my RTC for first but later on did many helpless experiments with that. Now i am here, anyone knowing the issue please help me asap.

One more thing here i want to mention that i am using MSP430F6736 for one more of my project in which my RTC runs as expected no issue with that. I tried same code of RTC but doesnt work out on 6779A.

Thank you so much in advance for anyone helping me out of this situation. This is the last hurdle my project is stuck for release

CCS/MSP430FR2433: msp430fr2433

$
0
0

Part Number:MSP430FR2433

Tool/software: Code Composer Studio

Hi, 

I am using PORT Interrupts.

My Program is :

i) P2.7 is connected with switch (Interrupt).

ii) P3.2 is connected with LED.

When switch is pressed, LED will be on.

/*
* PORT2 VECTOR DEFINED=========================================================
*/

#pragma vector=PORT2_VECTOR
__interrupt void Port_2(void)
{
if (P2IFG & 0x80) {
P2IFG &= ~0x80; //P2.7 connected magnetic switch.
pattern=1;
__bic_SR_register_on_exit(LPM3_bits);
}

}

 


/*
* MAIN FUNCTION=================================================================
*/

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

///LED DEFINE-----------------------------------------------------
// P3OUT &= ~BIT2; // Clear P1.0 output latch for a defined power-on state
  P3DIR |= BIT2 ; // Set P3.2 to output direction

//PORT INTERRUPT DEFINE------------------------------------------

P2DIR &= ~BIT7; //p7 --magnet, P2DIR &= ~BIT7;
P2IES |= BIT7; 
P2IFG &= ~BIT7;
P2IE |= BIT7;


PM5CTL0 &= ~LOCKLPM5; // Disable the GPIO power-on default high-impedance mode

/

 

//start----------------------------------------------------------------------
while(1)
{
__bis_SR_register(LPM3_bits+GIE);

if(pattern > 0)
{
pattern = 0 ;
P3OUT &= ~BIT2;                                 //LED is working, I tested it without interrupt in my customized board.
__delay_cycles(800000);
P3OUT |= BIT2;
}

}
//return 0;
}

 

Can anyone please tell me,

what mistake I am doing?

so that the Interrupt is not working.

 

Regards,

Srijit. 

 

CCS/MSP432P4111: Can't change project includes for simple stopwatch program

$
0
0

Part Number:MSP432P4111

Tool/software: Code Composer Studio

I'm trying to program a relatively basic thing, a stopwatch. I have a MSP432P4111 launchpad which has a built in LCD.

1. My project needs to be triggered by an switch, to start and stop the clock

2. Show the time on an LCD

3. Display the same time via UART, and hopefully Bluetooth later

4. Be accurate to the millisecond.

I've reviewed example projects like:

lcd_f_animated_text_MSP_EXP432P4111_nortos_ccs    uartecho_MSP_EXP432P4111_nortos_ccs   gpio_input_interrupt_MSP_EXP432P4111_nortos_ccs   msp432p411x_rtc_04_MSP_EXP432P4111_nortos_ccs

It seems like all of the example projects have different included files or build options, like if i try to add " #include <ti/devices/msp432p4xx/driverlib/driverlib.h> " to a project that didn't have it already I always get ""C:/ti/simplelink_msp432p4_sdk_2_40_00_10/source/ti/devices/msp432p4xx/inc/msp.h", line 76: fatal error #35: #error directive: "Failed to match a default include file" "

It's extremely frustrating, if I programmed this with Arduino I would be done in a day, but I have to use code composer studio for "school reasons".  I know Arduino isn't as fast or accurate but it's really nice how the same code works on different boards.

Can someone please tell me how to make a project with all the necessary includes and options for my project? 

This is the code i have so far, it's based off the animate text example. I tried to mix and match different examples but it's not working right.

please help!

//Combined with gpio interrupt
//* MSP432 LCD_F Animated Text
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <stdint.h>
#include <stddef.h>
#include <ti/drivers/GPIO.h>
#include <ti/drivers/UART.h>
#include "ti/devices/msp432p4xx/inc/msp.h"


int t =0;
int i1;
int i2;
int i3;
int i4;
int i5;
int i6;


// RTC interrupt service routine
void RTC_C_IRQHandler(void)
{
    // Toggles P1.0 every second
    if (RTC_C->PS1CTL & RTC_C_PS1CTL_RT1PSIFG)
    {
     //   P1->OUT ^= BIT0;
        t++;

        // Clear the pre-scalar timer interrupt flag
        RTC_C->PS1CTL &= ~(RTC_C_PS1CTL_RT1PSIFG);
    }
}


// Definitions for LCD Driver
#define char1 16    // Digit A1 - L16
#define char2 32    // Digit A2 - L32
#define char3 40    // Digit A3 - L40
#define char4 36    // Digit A4 - L36
#define char5 28    // Digit A5 - L28
#define char6 44    // Digit A6 - L44

// LCD memory map for numeric digits (Byte Access)
const char digit[10][4] =
{
    {0xC, 0xF, 0x8, 0x2},  /* "0" LCD segments a+b+c+d+e+f+k+q */
    {0x0, 0x6, 0x0, 0x2},  /* "1" */
    {0xB, 0xD, 0x0, 0x0},  /* "2" */
    {0x3, 0xF, 0x0, 0x0},  /* "3" */
    {0x7, 0x6, 0x0, 0x0},  /* "4" */
    {0x7, 0xB, 0x0, 0x0},  /* "5" */
    {0xF, 0xB, 0x0, 0x0},  /* "6" */
    {0x4, 0xE, 0x0, 0x0},  /* "7" */
    {0xF, 0xF, 0x0, 0x0},  /* "8" */
    {0x7, 0xF, 0x0, 0x0}   /* "9" */
};

// LCD memory map for uppercase letters (Byte Access)
const char alphabetBig[26][4] =
{
    {0xF, 0xE, 0x0, 0x0},  /* "A" LCD segments a+b+c+e+f+g+m */
    {0x1, 0xF, 0x0, 0x5},  /* "B" */
    {0xC, 0x9, 0x0, 0x0},  /* "C" */
    {0x0, 0xF, 0x0, 0x5},  /* "D" */
    {0xF, 0x9, 0x0, 0x0},  /* "E" */
    {0xF, 0x8, 0x0, 0x0},  /* "F" */
    {0xD, 0xB, 0x0, 0x0},  /* "G" */
    {0xF, 0x6, 0x0, 0x0},  /* "H" */
    {0x0, 0x9, 0x0, 0x5},  /* "I" */
    {0x8, 0x7, 0x0, 0x0},  /* "J" */
    {0xE, 0x0, 0x2, 0x2},  /* "K" */
    {0xC, 0x1, 0x0, 0x0},  /* "L" */
    {0xC, 0x6, 0x0, 0xA},  /* "M" */
    {0xC, 0x6, 0x2, 0x8},  /* "N" */
    {0xC, 0xF, 0x0, 0x0},  /* "O" */
    {0xF, 0xC, 0x0, 0x0},  /* "P" */
    {0xC, 0xF, 0x2, 0x0},  /* "Q" */
    {0xF, 0xC, 0x2, 0x0},  /* "R" */
    {0x7, 0xB, 0x0, 0x0},  /* "S" */
    {0x0, 0x8, 0x0, 0x5},  /* "T" */
    {0xC, 0x7, 0x0, 0x0},  /* "U" */
    {0xC, 0x0, 0x8, 0x2},  /* "V" */
    {0xC, 0x6, 0xA, 0x0},  /* "W" */
    {0x0, 0x0, 0xA, 0xA},  /* "X" */
    {0x0, 0x0, 0x0, 0xB},  /* "Y" */
    {0x0, 0x9, 0x8, 0x2}   /* "Z" */
};



static void showChar(char c, int position)
{
    uint8_t ii;
    if (c == ' ')
    {
        for (ii=0; ii<4; ii++)
        {
            LCD_F->M[position+ii] |= 0x00;
        }
    }
    else if (c >= '0' && c <= '9')
    {
        for (ii=0; ii<4; ii++)
        {
            LCD_F->M[position+ii] |= digit[c-48][ii];
        }
    }
    else if (c >= 'A' && c <= 'Z')
    {
        for (ii=0; ii<4; ii++)
        {
            LCD_F->M[position+ii] |= alphabetBig[c-65][ii];
        }
    } else
    {
        LCD_F->M[position] = 0xFF;
    }
}

// Configuration Structure for LCD
LCD_F_Config lcdConf =
{
    .clockSource = LCD_F_CLOCKSOURCE_ACLK,
    .clockDivider = LCD_F_CLOCKDIVIDER_32,
    .clockPrescaler = LCD_F_CLOCKPRESCALER_1,
    .muxRate = LCD_F_4_MUX,
    .waveforms = LCD_F_STANDARD_WAVEFORMS,
    .segments = LCD_F_SEGMENTS_ENABLED
};



int main(void)
 {
    // Halting the Watchdog
    WDT_A_holdTimer();
    // Enabling MASTER interrupts
    Interrupt_enableMaster();

    int i1 = 0;
    int i2 = 0;
    int i3 = 0;
    int i4 = 0;
    int i5 = 0;
    int i6 = 0;

    /*         UART wont word DX
  //  UART_write(UART_Handle handle, const void *buffer, size_t size);
   //  mainThread(NULL);
     //  char        input;
       char  echoPrompt[] = "Test:\r\n";
       UART_Handle uart;
       UART_Params uartParams;
       GPIO_init();
       UART_init();
    //   GPIO_setConfig(Board_GPIO_LED0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);

      // GPIO_write(Board_GPIO_LED0, Board_GPIO_LED_ON);
       UART_write(uart, echoPrompt, sizeof(echoPrompt));
*/


    //Setting MCLK to REFO at 128Khz for LF mode

    CS_setReferenceOscillatorFrequency(CS_REFO_128KHZ);
    CS_initClockSignal(CS_MCLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_1);
    PCM_setPowerState(PCM_AM_LF_VCORE0);

    // Configuring GPIO
    GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
    GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);

    GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN1);
    GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);

    // Configuring P1.0 as output and P1.1 (switch) as input
    GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);
    GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN2);
    GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN1);

    // Configuring P1.1 as an input and enabling interrupts
    GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1);
    GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1);
    GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1);
    Interrupt_enableInterrupt(INT_PORT1);

  //  MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1);
  //  MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1);
  //  MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1);

    // Configuring Timer32 to 128000 (1s) of MCLK in periodic mode
   Timer32_initModule(TIMER32_BASE, TIMER32_PRESCALER_1, TIMER32_32BIT, TIMER32_PERIODIC_MODE);

    // Enabling interrupts
   // MAP_Interrupt_enableInterrupt(INT_PORT1);
    Interrupt_enableInterrupt(INT_T32_INT1);
    Interrupt_enableMaster();






    // Initializing all of the function selection bits in the pins
    P3->SEL1 |= 0xF2;
    P6->SEL1 |= 0x0C;
    P7->SEL1 |= 0xF0;
    P8->SEL1 |= 0xFC;
    P9->SEL1 |= 0xFF;
    P10->SEL1 |= 0x3F;

    // Setting ACLK to the reference oscillator
    CS_initClockSignal(CS_ACLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_1);

    // Initializing the LCD_F module
    LCD_F_initModule(&lcdConf);

    // Clearing out all memory
    LCD_F_clearAllMemory();

    // Initializing all of our pins and setting the relevant COM lines
    LCD_F_setPinsAsLCDFunction(LCD_F_SEGMENT_LINE_0, LCD_F_SEGMENT_LINE_3);
    LCD_F_setPinAsLCDFunction(LCD_F_SEGMENT_LINE_6);
    LCD_F_setPinsAsLCDFunction(LCD_F_SEGMENT_LINE_16, LCD_F_SEGMENT_LINE_19);
    LCD_F_setPinsAsLCDFunction(LCD_F_SEGMENT_LINE_26, LCD_F_SEGMENT_LINE_47);
    LCD_F_setPinAsCOM(LCD_F_SEGMENT_LINE_26, LCD_F_MEMORY_COM0);
    LCD_F_setPinAsCOM(LCD_F_SEGMENT_LINE_27, LCD_F_MEMORY_COM1);
    LCD_F_setPinAsCOM(LCD_F_SEGMENT_LINE_6, LCD_F_MEMORY_COM2);
    LCD_F_setPinAsCOM(LCD_F_SEGMENT_LINE_3, LCD_F_MEMORY_COM3);

    // Turing the LCD_F module on
    LCD_F_turnOn();


    // number + '0' = char of that number   =D cool
    showChar(i1 + '0', char1);
    showChar(i2 + '0', char2);
    showChar(i3 + '0', char3);
    showChar(i4 + '0', char4);
    showChar(i5 + '0', char5);
    showChar(i6 + '0', char6);

        PCM_gotoLPM0();


    // Enabling SRAM Bank Retention
    SysCtl_A_enableSRAMRetention(0x20002000, 0x20002000);


    GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
    GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN2);
    GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN1);



    // Configure Port J
    PJ->DIR |= (BIT2 | BIT3); PJ->OUT &= ~(BIT2 | BIT3);

    PJ->SEL0 |= BIT0 | BIT1;                // set LFXT pin as second function

    CS->KEY = CS_KEY_VAL ;                  // Unlock CS module for register access

    CS->CTL2 |= CS_CTL2_LFXT_EN;            // LFXT on

    // Loop until XT1, XT2 & DCO fault flag is cleared
    do
    {
       // Clear XT2,XT1,DCO fault flags
       CS->CLRIFG |= CS_CLRIFG_CLR_DCOR_OPNIFG | CS_CLRIFG_CLR_HFXTIFG |
               CS_CLRIFG_CLR_LFXTIFG | CS_CLRIFG_CLR_FCNTLFIFG;
       SYSCTL_A->NMI_CTLSTAT &= ~ SYSCTL_A_NMI_CTLSTAT_CS_SRC;
    } while ((SYSCTL_A->NMI_CTLSTAT | SYSCTL_A_NMI_CTLSTAT_CS_FLG)
            && (CS->IFG & CS_IFG_LFXTIFG)); // Test oscillator fault flag

    // Select ACLK as LFXTCLK
    CS->CTL1 &= ~(CS_CTL1_SELA_MASK) | CS_CTL1_SELA_0;
    CS->KEY = 0;                            // Lock CS module from unintended accesses

    // Configure RTC

    // Unlock RTC key protected registers
    RTC_C->CTL0 = RTC_C_KEY;

    RTC_C->CTL13 = RTC_C_CTL13_HOLD |       // Hold the RTC for now
            RTC_C_CTL13_MODE |              // Set the RTC to calendar mode
            RTC_C_CTL13_BCD;                // BCD mode
    RTC_C->PS1CTL = RTC_C_PS1CTL_RT1IP__2 | // set divider to 128
            RTC_C_PS1CTL_RT1PSIE;           // Enable pre-scaler interrupt enable

    // Start RTC calendar mode
    RTC_C->CTL13 = RTC_C->CTL13 & ~(RTC_C_CTL13_HOLD);

    // Lock the RTC registers
    RTC_C->CTL0 = RTC_C->CTL0 & ~(RTC_C_CTL0_KEY_MASK);

    // Enable all SRAM bank retentions prior to going to LPM3
    SYSCTL_A->SRAM_BANKEN_CTL0 = SYSCTL_A_SRAM_BANKEN_CTL0_BNK0_EN
                                | SYSCTL_A_SRAM_BANKEN_CTL0_BNK1_EN
                                | SYSCTL_A_SRAM_BANKEN_CTL0_BNK2_EN
                                | SYSCTL_A_SRAM_BANKEN_CTL0_BNK3_EN;
    // Enable retention for all blocks within each bank (8blks/bank x 4banks=32 blocks)
    SYSCTL_A->SRAM_BLKRET_CTL0 = 0xFFFFFFFF;

    // Enable global interrupt
    __enable_irq();

    // Enable the RTC_C in the NVIC module
    NVIC->ISER[0] = 1 << ((RTC_C_IRQn) & 31);

    // Sleep on exit from ISR
    //SCB->SCR |= SCB_SCR_SLEEPONEXIT_Msk;

    // Ensures SLEEPONEXIT takes effect immediately
   // __DSB();



    while (1)
    {



        // Initializing all of our pins and setting the relevant COM lines
        LCD_F_setPinsAsLCDFunction(LCD_F_SEGMENT_LINE_0, LCD_F_SEGMENT_LINE_3);
        LCD_F_setPinAsLCDFunction(LCD_F_SEGMENT_LINE_6);
        LCD_F_setPinsAsLCDFunction(LCD_F_SEGMENT_LINE_16, LCD_F_SEGMENT_LINE_19);
        LCD_F_setPinsAsLCDFunction(LCD_F_SEGMENT_LINE_26, LCD_F_SEGMENT_LINE_47);
        LCD_F_setPinAsCOM(LCD_F_SEGMENT_LINE_26, LCD_F_MEMORY_COM0);
        LCD_F_setPinAsCOM(LCD_F_SEGMENT_LINE_27, LCD_F_MEMORY_COM1);
        LCD_F_setPinAsCOM(LCD_F_SEGMENT_LINE_6, LCD_F_MEMORY_COM2);
        LCD_F_setPinAsCOM(LCD_F_SEGMENT_LINE_3, LCD_F_MEMORY_COM3);

        //uint8_t frame1 =     showChar(i6 + '0', char6);

        // Set battery animation frames
        LCD_F->ANM[0] = 0x11;         // Frame 1    // Not sure why this is the same as frame 1
        LCD_F->ANM[1] = 0x11;         // Frame 2     //but displays something else... ?
        LCD_F->ANM[2] = 0x31;         // Frame 3
       // LCD_F->ANM[3] = 0x33;         // Frame 4
      //  LCD_F->ANM[4] = 0x73;         // Frame 5
      //  LCD_F->ANM[5] = 0x77;         // Frame 6
      //  LCD_F->ANM[6] = 0xF7;         // Frame 7
     //   LCD_F->ANM[7] = 0xFF;         // Frame 8

        // Configuring and enabling animation
        LCD_F_setAnimationControl(LCD_F_ANIMATION_FREQ_CLOCK_PRESCALAR_512,
                LCD_F_ANIMATION_FREQ_CLOCK_DIVIDER_8,
                LCD_F_ANIMATION_FRAMES_T0_TO_T3);
        LCD_F_enableAnimation();

        // Turing the LCD_F module on
        LCD_F_turnOn();

        // Going into LPM0
        PCM_gotoLPM3();   // ?
        PCM_gotoLPM0();



           // GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN2);

        // Initializing all of the function selection bits in the pins
        P3->SEL1 |= 0xF2;
        P6->SEL1 |= 0x0C;
        P7->SEL1 |= 0xF0;
        P8->SEL1 |= 0xFC;
        P9->SEL1 |= 0xFF;
        P10->SEL1 |= 0x3F;

        // Setting ACLK to the reference oscillator
        CS_initClockSignal(CS_ACLK, CS_REFOCLK_SELECT, CS_CLOCK_DIVIDER_1);

        // Initializing the LCD_F module
        LCD_F_initModule(&lcdConf);

        // Clearing out all memory
        LCD_F_clearAllMemory();

        i6++;

        if (i6 ==10 )
        {
            i6=0;
            i5 ++;
        }

        if (i5 ==10 )
        {
            i5=0;
            i4 ++;
        }

        if (i4 ==10 )
        {
            i4=0;
            i3 ++;
        }

        if (i3 ==10 )
        {
            i3=0;
            i2 ++;
        }

        if (i2 ==10 )
        {
            i2=0;
            i1 ++;
        }

        LCD_F_turnOn();
        showChar(i1 + '0', char1);
        showChar(i2 + '0', char2);
        showChar(i3 + '0', char3);
        showChar(i4 + '0', char4);
        showChar(i5 + '0', char5);
        showChar(i6 + '0', char6);

        PCM_gotoLPM0();




        // Going to LPM3

            PCM_gotoLPM3();   // ?

        // Setting the sleep deep bit
//             SCB->SCR |= (SCB_SCR_SLEEPDEEP_Msk);

    //         __sleep();


    }





 }




// GPIO ISR
void PORT1_IRQHandler(void)
{
    uint32_t status;

    status = GPIO_getEnabledInterruptStatus(GPIO_PORT_P1);
    GPIO_clearInterruptFlag(GPIO_PORT_P1, status);

    // Toggling the output on the LED
    if(status & GPIO_PIN1)
    {
        // GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
        GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN1);
        GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN2);
   //     showChar(i1 + '0', char1);
   //     showChar(i2 + '0', char2);
    //    showChar(i3 + '0', char3);
   //     showChar(i4 + '0', char4);
    //    showChar(i5 + '0', char5);
   //    showChar(i6 + '0', char6);
    }

}




// Timer32 ISR
void T32_INT1_IRQHandler(void)
{
    MAP_Timer32_clearInterruptFlag(TIMER32_BASE);
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0);
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);
    MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1);
    //t1++;






}



MSP432P401R: Seeking Eagle schematics for MSP ‑‑ EXP432P401R launchpad or MSP432P401R MCU

$
0
0

Part Number:MSP432P401R

In it is mentioned that there are Eagle schematics for various launchpad designs. The document MSP432P401R SimpleLink™ Microcontroller LaunchPad™ DevelopmentKit (MSP ‑‑ EXP432P401R) slau597f.pdf () contains a schematic, but no links to eagle library or schematic file sources. Can users download these from TI ?

MSP432E401Y: MSP432E401Y SimpleLink SDK upgrade appears to cause HTTPClient connects to fail

$
0
0

Part Number:MSP432E401Y

Hi,

I just upgraded the MSP432E401Y SimpleLink SDK from version 2.30.00.14 to version 2.40.00.11.   My application has a thread that periodically makes HTTPClient requests via my wired ethernet connection.   Prior to the upgrade  I had no problems sending requests or receiving responses from my web service and the thread runs stable.   Since the upgrade and running the exact same baseline of my software, the thread runs for a few seconds then the HTTPClient_connect() fails with a -10 error code.  If I switch back to version 2.30.00.14 and rebuild, all works fine.   I checked the release notes for version 2.40.00.11 and did not see anything that would impact the HTTPClient interface.   I am using Code Composer Studio v8.2.0.00007.  Any ideas on why this is happening?

Thanks,

Tim


RTOS/MSP430FR6989: AutoRun: Target not run as the symbol "main" is not defined

$
0
0

Part Number:MSP430FR6989

Tool/software: TI-RTOS

Hello everyone,

I am trying to use Ti-RTOS on MSP430FR6989. I have copied GPIO Interrupt Driver Example project provided by TI to my current workspace (I have tried simple Kernel Examples too). Even though project builds without errors and warnings, it is not running as expected. It prints the message "MSP430: AutoRun: Target not run as the symbol "main" is not defined". To see whether the issue was because of copying old CCS project (I believe TI example uses older version of CCS) to new workspace, I have created new project and copy the source files. Again, project builds fine but gives the same problem as before.

As you can see disassembly in the screenshot below, there is some problem. However, I can not figure out the actual reason. Please help me to fix this.

Thank you,

Mounika

CCS/MSP430F5528: On power up, unable to run my Main.

$
0
0

Part Number:MSP430F5528

Tool/software: Code Composer Studio

Hi,

I'm using MSP430F5528 for one of my project, I'm flashing my code into MSP430F5528 using MSP-FET. I'm able to run the code when I go step by step execution, but if I run the code at once I'm unable to get my output, it will go for no operation mode.

And also once after flashing, if I restart my MSP430F5528, it's not automatically running my code, I'm able to run other example codes on restart .

Do I need to do anything to work it on Reset? Please let me know.

Thanks in advance.

Regards,

Vinayak

EVM430-FR6047: Energia

RTOS/MSP430F5659: MSP430F5659 USCI - SPI Module Constantly Transmits 34 or 0

$
0
0

Part Number:MSP430F5659

Tool/software: TI-RTOS

Strange problem here, but the spi module is transmitting only 34 (base 10) or 0 (base 10) no matter what I send to the UCA1TXBUF. Below is a scope grab of the spi problem transmitting 34,

Here is a scope screen shot of the spi transmitting 0,

The SPI UCA1SIMO and UCA1SCK are connected to a Analog Devices AD5293 digital pot.

#include <msp430.h> 
#include <math.h>
#include <stdlib.h>

//=====================================================================================================================================================================
//                                                                  Global Variables
//=====================================================================================================================================================================
unsigned char MST_Data_index = 1;
unsigned char MST_Data[2];
/**
 * main.c
 */

void digital_pot_clt(unsigned int ctl, unsigned int val, unsigned char *ctl1, unsigned char *ctl2) {

    unsigned int to_convert;
    unsigned int tmp_val;
    unsigned int tmp_ctl;
    unsigned int pot_cmd;
    //0. Check if the resistance value is greater than 1023.
    if (val > 1023) {
        tmp_val = 511;
    }
    else {
        tmp_val = val;
    }

    //1. Check the control value.
    if (ctl <= 6 & ctl >= 0) {
        tmp_ctl = ctl << 10;
    }
    else
        tmp_ctl = 0;

    //2. Convert the 16 Bit Control Value to Two 8 Bit Values
    pot_cmd = tmp_ctl | tmp_val;

    ctl1[0] = pot_cmd;
    ctl2[0] = pot_cmd >> 8;

}

int main(void)
{

    __disable_interrupt();
    //0. Setup a sin function in memory.
    unsigned short v[26];
    //20kHz

    v[0] = 2046;
    v[1] = 2554;
    v[2] = 3031;
    v[3] = 3446;
    v[4] = 3772;
    v[5] = 3991;
    v[6] = 4087;
    v[7] = 4056;
    v[8] = 3898;
    v[9] = 3623;
    v[10] = 3250;
    v[11] = 2801;
    v[12] = 2305;
    v[13] = 1792;
    v[14] = 1296;
    v[15] = 846;
    v[16] = 472;
    v[17] = 196;
    v[18] = 37;
    v[19] = 3;
    v[20] = 98;
    v[21] = 315;
    v[22] = 641;
    v[23] = 1055;
    v[24] = 1531;
    v[25] = 2039;
    v[25] = 2046;

    //1.  ======================================= Configure the WDT to stop working =======================================.
    WDTCTL = WDTPW | WDTHOLD;

    //2. ======================================= System Clock =======================================



    //3.  ======================================= Configure the DAC to  =======================================,
    //a. Configure the input range to full scale output.
    DAC12_0CTL0 = DAC12IR;
    //b. Configure the DAC reference voltage to AVCC.
    DAC12_0CTL0 |= DAC12SREF_1;
    //c. Configure the DAC Amplifier Setting -> Input Buffer: HS/HC & Output Buffer: HS/HC
    DAC12_0CTL0 |= DAC12AMP_5;
    //d. Enable Conversion.
    DAC12_0CTL0 |= DAC12ENC;
    //e. Turn on Calibration.
    DAC12_0CTL0 |= DAC12CALON;
    //f. Select the load trigger for the DAC.
    //DAC12_0CTL0 |= DAC12LSEL1;
    //g. Turn on the dac ie. //DAC12IFG will not be set if this is enabled.
    //DAC12_0CTL0 |= DAC12IE;


    //3. ======================================= Configure the DMA controller  =======================================
    //a. Source address.
    __data16_write_addr((unsigned short) &DMA0SA, (unsigned long) &v[0]);
    //b. Destination Address
    __data16_write_addr((unsigned short) &DMA0DA, (unsigned short) &DAC12_0DAT);
    //c. Set the block size.
    DMA0SZ = 25;
    //d. Repeated Single Transfer.
    DMA0CTL = DMADT_5;
    //e.  Source address is incremented.
    DMA0CTL |= DMASRCINCR_3;
    //f. Destination address is unchanged.
    DMA0CTL |= DMADSTINCR_0;
    //g. Enable DCA Interrupt
    DMACTL0 |= DMA0TSEL_1;
    //h. Enable DMA0
    DMA0CTL |= DMAEN;
    //DAC12_0CTL0 = DAC12IFG;

    //4. ======================================= Configure the Timer A0 controller  =======================================
    //a. CCR0 interrupt enabled
    TA0CCTL0 = CM1 + OUTMOD2;
    TA0CCR0 = 1;
    //b. SMCLK, upmode, clear TAR
    TA0CTL = TASSEL_2 + MC_1 + TACLR;


    //5.  ======================================= SPI Configuration for OFFSET and GAIN =======================================
    //a. Configure the pins for SPI output
    //1.. Port 8 Pins,
    //PIN1 (UCA1CLK)
    //PIN2 (UCA1SIMO)
    //PIN3 (UCA1SOMI)
    P8SEL = 0b00001110;
    P8DIR = 0b00000000;

    //2. Port 2 Pins
    //========= OFFSET =========
    //===PIN2 U10 RST===
    //Set the direction.
    P2DIR = 0b00000100;
    //Set the pull up resistor (disable).
    P2REN = 0b00000000;
    //Set the drive strength (full).
    P2DS = 0b00000100;
    //Set the pin function (gpio).
    P2SEL = 0b00000000;
    //Set the output off. RST active high!
    P2OUT |= 0;

    //===PIN0 U10 SYNC===
    //Set the direction.
    P2DIR |= 0b00000001;
    //Set the pull up resistor (disable).
    P2REN |= 0b00000000;
    //Set the drive strength (full).
    P2DS |= 0b00000001;
    //Set the pin function (gpio).
    P2SEL |= 0b00000000;
    //Set the output to on. SYNC ACTIVE LOW!
    P2OUT |= BIT0;

    //===PIN1 U10 RDY===
    //Set the direction (input).
    P2DIR |= 0b00000000;
    //Set the pull up resistor (enable).
    P2REN |= 0b00000000;
    //Set the drive strength (full).
    P2DS |= 0b00000000;
    //Set the pin function (gpio).
    P2SEL |= 0b00000000;

    //========= GAIN =========
    //===PIN5 U11 RST===
    //Set the direction.
    P2DIR |= BIT5;
    //Set the pull up resistor (disable).
    P2REN |= 0b00000000;
    //Set the drive strength (full).
    P2DS |= BIT5;
    //Set the pin function (gpio).
    P2SEL |= 0b00000000;
    //Set the output off. RST active high!
    //P2OUT |= ;

    //===PIN3 U11 SYNC===
    //Set the direction.
    P2DIR |= BIT3;
    //Set the pull up resistor (disable).
    P2REN |= 0b00000000;
    //Set the drive strength (full).
    P2DS |= BIT3;
    //Set the pin function (gpio).
    P2SEL |= 0b00000000;
    //Set the output to on. SYNC ACTIVE LOW!
    P2OUT |= BIT3;

    //===PIN4 U11 RDY===
    //Set the direction (input).
    P2DIR |= 0;
    //Set the pull up resistor (enable).
    P2REN |= 0;
    //Set the drive strength (full).
    P2DS |= 0;
    //Set the pin function (gpio).
    P2SEL |= 0;

    //3. Univ. Serial Comm Module (SPI)
    // **Put state machine in reset**
    UCA1CTL1 |= UCSWRST;
    // 3-pin, 8-bit SPI master
    // Clock polarity high, MSB
    UCA1CTL0 |= UCMST|UCSYNC|UCMSB;
    // SMCLK
    UCA1CTL1 |= UCSSEL_2;
    // /2
    UCA1BR0 = 0x02;
    UCA1BR1 = 0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ;
    // No modulation
    UCA1MCTL = 0;
    // **Initialize USCI state machine**
    UCA1CTL1 &= ~UCSWRST;
    // Enable USCI_A0 RX,TX interrupt
    //UCA1IE = UCRXIE;

    //6.  ======================================= SPI Transmit for OFFSET and GAIN =======================================
    //A. ====================== Transmit for OFFSET ======================
   //B. ====================== Transmit for GAIN ======================
   //1. Setup the SYNC POT input.
   P2OUT |= BIT3;

   //2. Wait for slave to initialize
   __delay_cycles(100);

   //4. Send the POT data.

  //P2OUT ^= BIT3;
  //while (!(UCTXIFG));               // USCI_A0 TX buffer ready?
   //0b00000110
  UCA1TXBUF = 6;
   //5. Setup the SYNC POT input.
   //P2OUT ^= BIT3;

  __delay_cycles(100);

   P2OUT ^= BIT3;
   //while (!(UCTXIFG));               // USCI_A0 TX buffer ready?
   UCA1TXBUF = 2;
   //5. Setup the SYNC POT input.
   P2OUT ^= BIT3;

  //6. Wait for slave to initialize
   __delay_cycles(100);

  //8. Send the POT data.
  P2OUT ^= BIT3;
  MST_Data_index = 1;
  //while (!(UCA1IFG&UCTXIFG));               // USCI_A0 TX buffer ready?
  UCA1TXBUF = 16;                     // Transmit first character
  P2OUT ^= BIT3;

  __delay_cycles(100);

  P2OUT ^= BIT3;
  MST_Data_index--;
  //while (!(UCA1IFG&UCTXIFG));               // USCI_A0 TX buffer ready?
  UCA1TXBUF = 1;                     // Transmit first character
  P2OUT ^= BIT3;


   //9. Global Interrupt Enable
   __bis_SR_register(GIE);

}

// Timer0 A0 interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(TIMER0_A0_VECTOR))) TIMER0_A0_ISR (void)
#else
#error Compiler not supported!
#endif
{
    P2OUT ^= BIT2;
   //DMA0CTL |= DMAREQ;
}

Compiler/MSP430FR5969: SPIA Power consumption problem

$
0
0

Part Number:MSP430FR5969

Tool/software: TI C/C++ Compiler

In recent tests I have found a problem: the power consumption of about MSP430FR5969 in SPI communication will eUSCIA configuration for SPI mode (UCCKPH configuration is 1, UCCKPL configuration is 0, the host mode, start high), once every 4 ms for SPI communication, the power consumption about 15 ua (when no communication has been in LPM3 mode).In the process, when the lowest MISO bit is 1, and the end of the communication MISO pins jumping from 1 to 0, the current will happen suddenly become larger, MSP430FR5969  power consumption up to 170 ua (also in LPM3 low power consumption)and sunstain.

AT the same time monitoring module UCBUSY always jump between 0/1, while SPIB under same configuration module will not appear these problems.MSP430FR5969 errata in your company manual, reference to similar problems to SPIA module (issue number: USCI41), doubt has strong correlation with the problem.

To help clear the problem, I wrote a simple test code in Development board (MSP430FR5969 LaunchPad ™ Development Kit) on the minimum system, can describe the bug before the repetition.The basic idea is to use MSP430FR5969 IO port output to simulate from the sending end of machine, connected to the MSP430 P2.1 SPI input port (UCA0SOMI).When the SPI to receive 8 bits of data are all 1, after the SPI communication, pull UCA0SOMI port by IO output low, at this point MSP430FR5969 current will increase to 170 ua, at the same time monitoring module UCBUSY always jump between 0/1.

// MSP430FR5969
// -----------------
// /|\ | P1.3|-> Slave Chip Select (GPIO)
// | | |
// | |
// | P2.0|-> Data Out (UCA0SIMO)
// | |
// | P2.1|<- Data In (UCA0SOMI)
// | |
// | P1.5|-> Serial Clock Out (UCA0CLK)
// | P2.4|-470K电阻并接P2.1|Data In (UCA0SOMI)

/********************************************************************** 
* 函数名称:// asic_spi_writedata
* 功能描述:// 通过spi读asic寄存器数据
* 输入参数:// ASIC寄存器地址
* 输出参数:// 无
* 返 回 值:// 该寄存器地址下数据
* 其它说明:
***********************************************************************/ 
uint8_t asic_spi_readdata(uint8_t address)
{
uint8_t data = 0;

ASIC_SPI_CLEARCS();
__delay_cycles(100);

while(!(UCA0IFG & UCTXIFG)); //USCI_A0 TX buffer ready?
UCA0TXBUF = address; //发送数据
while(!(UCA0IFG & UCTXIFG));

__delay_cycles(100);
UCA0TXBUF = 0x00; //发送数据
while(!(UCA0IFG & UCTXIFG));

__delay_cycles(100);
while(!(UCA0IFG & UCRXIFG));
data = UCA0RXBUF; //读数据

__delay_cycles(100);
ASIC_SPI_SETCS();
return data;
}

/********************************************************************** 
* 函数名称:// void gpio_init_forPowerMeas(void)
* 功能描述:// 功耗测试使用的gpio驱动,将所有端口设为输出,以避免输入悬空对功耗的影响
* 输入参数:// 无
* 输出参数:// 无
* 返 回 值:// 无
* 其它说明:
***********************************************************************/

void gpio_init_forPowerMeas(void)
{
// Configure GPIO
P2SEL0 = 0;
P1SEL1 = ASIC_SCK ;
P1DIR = 0xff;
P1OUT = 0x00;

P2SEL0 = 0;
P2SEL1 = ASIC_MOSI + ASIC_MISO;
P2DIR = 0xff;
P2OUT = 0x00;

P3DIR = 0xff;
P3OUT = 0x00;

P4DIR = 0xff;
P4OUT = 0x00;

PJSEL0 = ACLK_OUT + LFXTIN + LFXTOUT ;
PJSEL1 = 0;
PJDIR |= 0xFF;
PJOUT = 0x00;


// Disable the GPIO power-on default high-impedance mode to activate
// previously configured port settings
PM5CTL0 &= ~LOCKLPM5;
}

/********************************************************************** 
* 函数名称:// asic_spi_init
* 功能描述:// UCA0模块 SPI初始化,用于ASIC通讯
* 输入参数:// 无
* 输出参数:// 无
* 返 回 值:// 无
* 其它说明:波特率4M,3线SPI,CS端由IO口模拟
***********************************************************************/ 
void asic_spi_init(void)
{

//Initialize SPI Master
//Disable the USCI Module
//Reset OFS_UCA0CTLW0 values
UCA0CTLW0 = UCSWRST + UCSSEL__SMCLK; 
//Select Clock SMCLK

//Bit clock prescaler setting. fBitClock = fBRCLK / UCBRx
//UCA0BRW = 8000000 / 1000000; //SMCLK 8M,波特率1M
UCA0BRW = 8000000 / 4000000;
/*
* Configure as SPI master mode.
* Clock phase select, polarity, msb
* UCMST = Master mode
* UCSYNC = Synchronous mode
* UCMODE_0 = 3-pin SPI
*/
//Data is changed on the first UCLK edge and captured on the followingedge.
//The inactive state is low.
//3-pin SPI

UCA0CTLW0 |= UCMSB + UCCKPH + UCMST + UCSYNC; //MSB First. capture changge
//Master mode //Synchronous mode

//No modulation
//UCA0MCTLW = 0;
//Enable SPI module
UCA0CTLW0 &= ~UCSWRST;
}

/********************************************************************** 
* 函数名称:// int main(void)
* 功能描述:// 1.应用程序的主函数
* 2.实现硬件和软件初始化,工作状态切换,记录复位源
* 输入参数:// 无
* 输出参数:// 无
* 返 回 值:// 无
* 其它说明:// 无
***********************************************************************/
int main(void)

cpu_initial();
uint16_t adc_cnt;
WDT_HOLD();

P2OUT |= BIT4; //P2.4管脚470K电阻接P2.1|<- Data In (UCA0SOMI)
adcbuf_v1 = asic_spi_readdata(0x00);
P2OUT &= ~BIT4; //进行读操作后将P2.4管脚置低
do
{
delay_ms(4);

//监测寄存器UCBUSY位,示波器接P3.6
if(UCA0STATW & UCBUSY)
{
P3OUT |= BIT6;
}
else
{
P3OUT &= ~BIT6;
}

}while(1);
}

 

Viewing all 22733 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>