MSP430 ตอนที่ 3 GPIO & Interrupt

Sirichat Sangjuiwong
MCUREGIS
Published in
1 min readMay 30, 2019

ในบทความนี้จะเป็นตัวอย่างการใช้งาน GPIO พื้นฐาน และ GPIO Interrupt ของ MSP430FR5729

ตัวอย่างที่ 1 พื้นฐานการเซ็ท GPIO เป็น Output

1.1 ทำการเซ็ท Direction ของ P3.3 ให้เป็น OutputP3DIR |= 0x01<<3;1.2 ทำการเซ็ทค่า Output ของ P3.3 ให้เป็น HighP3OUT |= 0x01<<3;

ตัวอย่างที่ 2 GPIO Interrupt ตัวอย่างนี้ให้เอามาประกอบต่อจากตัวอย่างที่ 1

2.1 ทำการเซ็ท Direction ของ P1.5 ให้เป็น InputP1DIR &= ~(0x01<<5);2.2 ทำการ Enable Internal Pull Resistor ในเคสนี้คือผมต่อสวิทช์ระหว่าง P1.5 กับ Ground เพียวๆ ไม่ได้ต่อ Resistor ด้านนอกP1REN |=  0x01<<5;      2.3 ทำการเลือกการ Pull Resistor เป็นแบบ Pull UpP1OUT |=  0x01<<5;2.4 ส่วนนี้จะเริ่มเข้าสู่การเซ็ท Interrupt โดยผมเลือกเป็น High to Low หรือ Falling Edge จากนั้นทำการ Enable Interrupt แล้วเคลียร์ Flag รอไว้P1IES |=  0x01<<5;      // High to Low EdgeP1IE  |=  0x01<<5;      // Interrupt EnableP1IFG &= ~(0x01<<5);    // Clear Interrupt Flag2.5 ส่วนนี้เป็น Interrupt Service Routine ของ Port 1 โดยเมื่อมี Interrupt เกิดขึ้นใน Port 1 จะกระโดดเข้ามาในนี้ โดยจะต้องเช็คว่ามาจาก Pin ไหนใน Port 1 ด้วยการอ่านค่าจาก P1IV ซึ่งของ Pin 5 จะเป็น 0x0C โดยเมื่อตรงตามเงื่อนไขผมจะให้มัน Toggle P3.3 #pragma vector=PORT1_VECTOR
__interrupt void MCUREGIS_SW(void)
{
uint16_t FLAG;

FLAG = P1IV;
if(FLAG == 0x0C)
{
P3OUT ^= 0x01<<3;
}
}

--

--