Skip to main content
Programing on Launchpad MSP432

Interrupt button

Prerequisite:

  • Hardware: Launchpad MSP432P401
  • IDE software: IAR/CCS/KEIL
  • Tool: Simplelink SDK MSP432 v3.20.00.06
Description: Simple program using two buttons connected to P1.0  and P1.4 to turn on or turn off LED on P1.0

Step1. Open example of Simplelink SDK without RTOS
Step2. modify the code as below
Step3. Compile and debug the program



/* DriverLib Includes */
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>

/* Standard Includes */
#include <stdint.h>
#include <stdbool.h>

volatile uint32_t SW1, SW2; //semaphores
void VectorButtons_Init(void){
  __disable_interrupt;
  //DisableInterrupts();          // set the I bit during initialization
  SW1 = 0; SW2 = 0;             // clear semaphores
  P1->SEL0 &= ~0x12;
  P1->SEL1 &= ~0x12;
  
  P1->DIR  &= ~0x12;             //MAKE P1.1, P1.4 
  P1->REN |= 0x12;              // enable pull resistor
  P1->OUT |= 0x12;              // p1.1, P1.4 pull up
  P1->IES  &= ~0x12;             // RISING edge event
  P1->IFG &= ~0x12;             // Clear the flag
  P1->IE |= 0x12;               // arm interupt on P1.4, P1.1
  NVIC->IP[8] = (NVIC->IP[8]&0x00FFFFFF)|0x40000000; // priority 2
  NVIC->ISER[1] = 0x00000008;   // enable interupt 35 in NVIC
  //EnableInterrupts();}
  __enable_interrupt;}
#define P1IFG_1 (*((volatile uint8_t *)(0x42000000 + 32*0x4C1C + 4*1)))
#define P1IFG_4 (*((volatile uint8_t *)(0x42000000 + 32*0x4C1C + 4*4)))
#define LEDOUT (*((volatile uint8_t *)(0x42000000 + 32*0x4C02 + 4*0)))
//bit-banding removes the bug
void PORT1_IRQHandler(void){
  if(P1IFG_1){
    P1IFG_1 = 0;        //acknowledge
    SW1 = 1;
  }
  if(P1IFG_4){
    P1IFG_4 = 0;        //acknowledge
    SW2 = 1;
  }
}
int main(void)
{
    /* Stop Watchdog  */
    MAP_WDT_A_holdTimer();
    VectorButtons_Init();
    
    //config LED 1 P1.0
    P1->SEL0 &= ~0x01;
    P1->SEL1 &= ~0x01;
    P1->DIR  |= 0x01;  // MAKE P1.0 Output
    P1->DS |= 0x01;    // Make P1.0 20mA maximum
    while(1)
    {
        if(SW1)
        {
          SW1 = 0;
          LEDOUT = 1;
        }
        if(SW2)
        {
          SW2 = 0;
          LEDOUT = 0;
        }
    }
}

Good luck!


Comments

Popular posts from this blog

Tự nhiên

Tự nhiên là những gì thuộc về tính tự có vốn là của nó, không có sự giải thích nào cho tự nhiên cả. Đó gọi là tự nhiên như cái tên mang ý nghĩa của nó vậy. Khoa học tự nhiên là khoa học liên quan tới nghiên cứu và tìm hiểu các vấn đề thuộc về đặc tính vốn có của sự vật theo một hình thức tự nó mà không phải là do con người tạo ra. Theo đó toán học, lý học, hóa học được xem là các ngành khoa học tự nhiên. Thật ra toán học nên được xem là ngành khoa học xã hội hơn là tự nhiên, vì về bản chất, toán học là thứ ngôn ngữ do con người sáng tạo ra. Vì thế nó mang những hình thái phụ thuộc vào nhận thức và cảm quan của người sáng tạo ra nó. Tuy nhiên toán học mang đặc tính tự nhiên ở chỗ, nó là phương tiện được xây dựng để mô tả đường lối của tự nhiên.
 Bộ lọc Kalman - giành cho người mới bắt đầu Ý tưởng:  Để thực hiện việc loại bỏ nhiễu trong việc đo lường tín hiệu, ta sử dụng một hệ thống lọc nhiễu hay gọi vắn tắt là bộ lọc (Filter). Các cách lọc nhiễu trong hệ thống căn bản gồm các bộ lọc thông thấp (Lowpass Filters), bộ lọc thông dải (Bandpass Filters), bộ lọc chặn (Notch Filters) và lọc thông cao (Highpass Filters). Dựa trên quan sát sự khác biệt giữa tín hiệu và nhiễu để thực hiện việc tách tín hiệu khỏi nhiễu. Fig1. Các kiểu bộ lọc cơ bản Trong trường hợp cơ bản, để đo chất lượng tín hiệu ta dùng chỉ số SNR (Signal-to-Noise ratio) để đánh giá mức độ mạnh giữa tín hiệu so với nhiễu. Nếu giữa tín hiệu và nhiễu có tính độc lập ( Tương quan là 0) thì việc tách tín hiệu là khả thi. Chẳng hạn các tín hiệu ta đo lường thường có một số tần số nhất định, ví dụ các tín hiệu sinh học thường khu trú trong vùng tần số thấp < 25 Hz. Các tín hiệu nhiễu nền thường là nhiễu trắng có phân bố rộng, nhiễu điện lưới có tần số xác định ...

Arduino Code for test Heart Rate 7 Click

Heart Rate 7 Click is the newest module from MikroE which uses VEM8080 photodetector has a wide range spectrum from 300nm - 1000nm. To control and acquisition data, AFE4404 from TI inc. is adopted. This chip permits control 3 LED channels, and sample heart rate default 100 SPS.  A 22-bit ADC permit collecting very small changed voltage from a PD sensor. In this example we config Arduino Mega  2650 as below: Pin 4 for RST PIN 5 CLK PIN 6 INT PIN 20 SDA PIN 21 SCL Config registers follow the default of AFE4404 datasheet Page 27 with some minor changes. 1. Config Internal Clock through  AFE_CONTROL2 register addr.: 0x23 value: 0x104218  // setup all dynamic power to save energy 2. Control LED2 current through AFE_LEDCNTRL register addr: 0x22 value: 0x000100 3. Read data using PROG_TG_EN signal through AFE_TIA_GAIN register addr: 0x21 value: 0x000125 Time to start and end of PROG_TG setup through two registers: AFE_PROG_TG_STC register (...