MSP430 ตอนที่ 3 GPIO & Interrupt
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;
}
}