Training pre-C10 - Day 2
3.2 Registers: PxDIR (x:1 , 2)
Thanh ghi này qui định loại ngõ vào ra cho các chân GPIO
Mặc định tất cả các chân là input (0),
khi cần đổi thành output (1), ta đặt
Bit tương ứng trên thanh ghi là 1.
VD: P1DIR = 0x01 //pin P1.0 is output
t tương ứng trên thanh ghi PxIN Lưu ý là ta phải chắc rằng bit tương ứng của GPIO trên thanh ghi PxDIR vẫn là 0 (input) trước khi đọc PxIN.3.2 Registers: PxIN (x: 1 , 2)Pre-C10 Training Day 222Thanh ghi này cho phép tắt hoặc mở chế độ pullup/pulldown resistor cho các chân GPIO.Mặc định các bit của thanh ghi này là 0.3.2 Registers: PxREN (x:1 , 2)Pre-C10 Training Day 2233.2 Registers: PxOUT (x: 1 , 2)Khi ta muốn xuất điện áp trên các chân Output, ta sẽ đặt giá trị tương ứng vào các thanh ghi PxOUT (logic 1 -> VCC, logic 0 -> 0V) Trong trường hợp thanh ghi PxREN qui định GPIO ở chế độ pullup/pulldown resistor thì PxOUT qui định:Lưu ý là ta phải chắc rằng bit tương ứng của GPIO trên thanh ghi PxDIR được set là 1 (output) trước khi xuất mức logic ra.Pre-C10 Training Day 224Để thực hiện xuất / nhập trên 1 chân (Pin): Đặt chức năng của pin là GPIO hay các chức năng khác qua thanh ghi PxSEL Đặt đúng giá trị cho thanh ghi PxDIR: 1:output; 0: input Xuất tín hiệu bằng cách ghi giá trị “0” hoặc “1” vào thanh ghi OUT của port tương ứng (vd: P1OUT) Đọc giá trị của chân bằng cách đọc mức logic trên thanh ghi IN của port tương ứng (vd: P1IN) Khi cần điện trở kéo lên/xuống, đặt đúng giá trị của bit trên các thanh ghi PxREN và PxOUT3.2 Registers: SummaryPre-C10 Training Day 225#include // hay //Khai báo biến toàn cụcunsigned int a//Khai báo chương trình convoid chuong_trinh_con(void){//chương trình con ở đây} 3.3 Programming:Pre-C10 Training Day 226//Chương trình chínhvoid main(void){ // Phần khởi tạo // vòng lặp vô tận while(1) { //thực hiện lệnh };}3.3 Programming:Pre-C10 Training Day 2273.3 Programming: BIT MASKMasking bits to 1Masking bits to 0QUERYING the status of a bit TOGGLING BIT VALUES#define BIT0 (0x0001)#define BIT1 (0x0002)#define BIT2 (0x0004)// . .#define BITE (0x4000)#define BITF (0x8000)Bit Mask Defined in MSP430G2553.hPre-C10 Training Day 2283.3 Ex1: Blink a ledPre-C10 Training Day 229Cắm kit và bật chương trình CCS.Tạo project mới trong CCS bằng cách chọn Project > New CCS Project3.3 Ex1: Blink a ledPre-C10 Training Day 230Trong cửa sổ New CCS Project chọn:Project Name: BlinkyLEDFamily: MSP430Variant: MSP430G2553Connections: TI MSP430 USB1Project Templates and examples: Empty project (with main.c)Nhấn Finish để kết thúc3.3 Ex1: Blink a ledPre-C10 Training Day 2//Blink a led connected with P1.0#include // or void main(void){// unsigned int i; // declare variables WDTCTL = WDTPW + WDTHOLD; // Stop watch dog timer P1DIR |= BIT0 + BIT6; // Set P1.0 and P1.6 to output // directionwhile(1){P1OUT ^= BIT0 + BIT6; // Toggle P1.0 and P1.6 using exclusive-OR__delay_cycles(1000000); // Delay 1000000 Machine Cycles (MC=1us) // in IAR: _delay_cycles(1000000);}}313.3 Ex1: Blink a ledPre-C10 Training Day 232Gõ lại code trên hoặc copy và paste vào cửa sổ code.Nhấn biểu tượng để build và nạp chương trình.Chương trình chuyển sang màn hình Debug. Nhấn F8 hoặc biểu tượng để MCU bắt đầu thực thi chương trình3.4 Ex2: Read a buttonButtonBTx voltageBTx logicNormalVCC1PushedGND0Khi chưa nhấn nút, chân P1.3 không nối với VCC hoặc GND -> mức logic không xác định (float).=> Cần dùng trở nội để pull up chân P1.3Pre-C10 Training Day 2333.4 Ex2: Read a buttonPre-C10 Training Day 234//Change logic output of P1.0&P1.6 while pressing P1.3#include // or void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop watch dog timerP1DIR |= BIT0 + BIT6; // Set P1.0 and P1.6 to output directionP1DIR &= ~BIT3; // Set P1.3 to input directionP1REN |= BIT3; // Set P1.3 Pull up/Pull down Resistor EnableP1OUT |= BIT3; // Set Pull up Resistor at P1.3while(1){if (P1IN & BIT3) // Check the status of P1.3 (==0 if button is pushed)P1OUT |= BIT0 + BIT6; // Set P1.0 & P1.6 to high outputelseP1OUT &= ~(BIT0 + BIT6); // Set P1.0 & P1.6 to low output}}Pre-C10 Training Day 235Part 4: TIMERPre-C10 Training Day 236Timer là ngoại vi cơ bản của vi xử lý , có chức năng định thì, capture, compareMSP430G2553 có 2 Timer A 16bit - A0 và A1 Hỗ trợ đa chức năng:Capture /Compare,ngõ ra PWM và định thì từng -khoảng thời gian.Có các chế độ ngắt Timer/Counter và Capture/Compare.Có thể lựa chọn để hoạt động với các nguồn xung Clock khác nhau.4.1 TIMER OVERVIEWPre-C10 Training Day 2374.1 TIMER OVERVIEWPre-C10 Training Day 2384.1 TIMER OVERVIEWPre-C10 Training Day 2394.1 TIMER OVERVIEWPre-C10 Training Day 240Pre-C10 Training Day 241TACLK: Nguồn clock ngoại được đưa vào chân P1.0 của MSP430G2553.4.2 TIMER CLOCK SOURCEPre-C10 Training Day 242ACLK (Auxiliary clock): Là một nguồn clock bổ sung cho Timer A, chỉ được cấp nguồn từ LFXTCL, thường dùng cho hệ thống phụ với clock hoạt động thấp để tiết kiệm năng lượng.4.2 TIMER CLOCK SOURCEPre-C10 Training Day 243SMCLK (Submaster clock): thường dùng cho ngoại vi, lấy nguồn từ DCO hoặc XT2.4.2 TIMER CLOCK SOURCEPre-C10 Training Day 244UP MODE: Chế độ đếm lên của Timer A. Giá trị của thanh ghi TAR (Timer A register) sẽ tăng liên tục từ 0 cho đến một giá trị được định sẵng trong thanh ghi TACCR0 rồi reset về giá trị 0,quá trình hoạt động cứ tiếp tục như vậy.4.3 TIMER MODESPre-C10 Training Day 245CONTINUOUS MODE: Chế độ đếm lên liên tục của Timer A.Trong một chu kỳ hoạt động giá trị của thanh ghi TARsẽ tăng liên tục từ 0 cho đến 0FFFFh rồi reset về giá trị 0.4.3 TIMER MODESPre-C10 Training Day 246UP/DOWN MODE: Chế độ đếm lên/xuống của Timer A. Trong một chu kỳ hoạt động giá trị của thanh ghi TAR sẽ tăng liên tục từ 0 cho đến TACCR0 rồi giảm dần về giá trị 0.4.3 TIMER MODESPre-C10 Training Day 2474.3 TIMER MODESPre-C10 Training Day 248Các thanh ghi config: TAxCTL: setup timer TARx: thanh ghi giá trị đếm của timerTACCRx: thanh ghi giá trị caputre/compareTAxCCTL: setup capture/compare modeTAIV: thanh ghi ngắt4.4 TIMER REGISTERSPre-C10 Training Day 249TAxCTLPre-C10 Training Day 250Pre-C10 Training Day 2TASSELx: được dùng để chọn clock source cho TIMER.TASSEL_0 : chọn clock TACLKTASSEL_1 : chọn clock ACLKTASSEL_2 : chọn clock SMCKEX: Chọn clock source là SMCLK cho TIMER: TA0CTL = TASSEL_2; //chọn SMCLK4.4 TIMER REGISTERSTAxCTL51Pre-C10 Training Day 2IDx: giá trị chia tần số cho clock source trước khi vào Timer Clock.ID_0 : chia tần số cho 1ID_1: chia tần số cho 2ID_2 : chia tần số cho 4ID_3 : chia tần số cho 8EX: Tạo xung clock 0.5MHz cấp cho timer từ nguồn SMCLK 1MHz TA0CTL = TASSEL_3 + ID_1; // SMCLK, chia 24.4 TIMER REGISTERSTAxCTL52Pre-C10 Training Day 2MCx: chọn 1 trong 4 mode cho Timer hoạt động như đã giới thiệu ở trên.MC_0 : Timer StopMC_1 : Up mode, Timer đếm tới CCR0MC_2 : Continuous mode, Timer đến tới giá trị 65535MC_3 : Up/Down mode, Timer đến tới CCR0 rồi đếm lùi về 0EX: Để chọn mode cho timer ta có thể : TA0CTL = TASSEL_3 + ID_1 + MC_2;4.4 TIMER REGISTERSTAxCTL53Pre-C10 Training Day 24.4 TIMER REGISTERSTAxCTLTACLR: Reset giá trị thanh ghi đếm TAxR khi set bit này lên 1. Bit tự động clear sau khi reset.TAIE: Cho phép ngắt tràn TIMER. Chương trình sẽ nhảy vào ngắt nếu TAIFG và TAIE được setTAIFG: Cờ ngắt tràn. Chỉ xảy ra ở 2 mode: Continuous Mode (TAxR từ 65535 về 0) và Up/Down Mode (TAxR từ 1 về 0). TAIFG tự động clear khi thực thi chương trình ngắt. EX: Khai báo chế độ Continuous Mode có ngắt tràn TIMER: TA0CTL = TASSEL_2 + ID_2 + MC_2 + TAIE;54Pre-C10 Training Day 24.4 TIMER REGISTERSTAxCCTLyCMx: chọn 1 trong 4 capture mode:CM_0 : Không sử dụng captureCM_1 : Capture ở cạnh lên của tín hiệuCM_2 : Capture ở cạnh xuống của tín hiệuCM_3 : Capture ở cạnh lên và cạnh xuống của tín hiệu55Pre-C10 Training Day 24.4 TIMER REGISTERSTAxCCTLyCCISx: chọn tín hiệu để captureCCIS_0 : Chọn tín hiệu capture là CCIxACCIS_1 : Chọn tín hiệu capture là CCIxBCCIS_2 : Tín hiệu đầu vào capture nối đấtCCIS_3 : Tín hiệu đầu vào nối VCC. CCIS_2 và CCIS_3 dùng để tạo capture bằng software.EX: TA0CCTL0 = CM_1 + CCIS_2; // Chọn capture cạnh lên TA0CCTL0 |= CCIS_3; // Xảy ra capture do tín hiệu chuyển từ GND -> VCC56Pre-C10 Training Day 24.4 TIMER REGISTERSTAxCCTLyCAP : Chọn mode compare/captureCAP = 0 : Mode CompareCAP = 1 : Mode Capture57Pre-C10 Training Day 24.4 TIMER REGISTERSTAxCCTLyOUTMODx: Output mode cho chức năng PWM cho tín hiệu OUTy. Xem chức năng của 58Pre-C10 Training Day 24.4 TIMER REGISTERSTAxCCTLy59Pre-C10 Training Day 24.4 TIMER REGISTERSTAxCCTLy60CCIE : cho phéo ngắt khi giá trị TIMER đến tới giá trị CCRx tương ứng.EX: Nhảy vào ngắt khi TAR đếm đến 30000 và 40000: TA0CTL = TASSEL_2 + ID_2 + MC_2 + TAIE; // Cài đặt TimerTA0CCR0= 30000; // Đặt giá trị mong muốn vào CCR0TA0CCR1 = 40000; // Đặt giá trị mong muốn vào CCR1TA0CCTL0 = CCIE; // Enable ngắt cho CCR0.TA0CCTL1 = CCIE; // Enable ngắt cho CCR1. 4.4 TIMER REGISTERSTAxCCTLyPre-C10 Training Day 261TIMER chạy ở chế độ Continuous Mode (chạy từ 0-65536). Khi giá trị TIMER đạt 30000 thì sẽ nhảy vào chương trình phục vụ ngắt CCR0. TIMER vẫn tiếp tục đếm lên và khi tới 40000 thì sẽ vào ngắt CCR2.Khi TIMER chạy đến 65536 và reset về 0 thì MCU thực hiện ngắt tràn TIMER** Ở Up Mode: TIMER chỉ đếm tới CCR0, khi đếm tới đó thì ngắt CCR0 được thực thi** Ở Up/Down Mode: TIMER đếm tới CCR0=> ngắt CCR0, và khi TIMER đếm lùi từ 1 về 0 => ngắt tràn TIMER 4.4 TIMER REGISTERSTAxCCTLyPre-C10 Training Day 262TAIV :Thanh ghi ngắt của TIMER, khi cờ ngắt của CCR1, CCR2 hoặc tràn TIMER (TAIF) bật lên thì thanh ghi này sẽ có 1 giá trị tương ứng như trong bảng. 3 ngắt này đều cùng nằm trong 1 VECTOR ngắt TIMER0_A1_VECTORNgắt CCR0 được nằm trong 1 VECTOR riêng: TIMER0_A0_VECTOR4.4 TIMER REGISTERSPre-C10 Training Day 263// Chương trình minh họa chức năng PWM để tăng giảm độ sáng LED2 trên kit launchpad#include void main(){ WDTCTL = WDTHOLD + WDTPW; // Stop watchdog timer P1DIR |= BIT6; // Chọn chức năng TA0.1 cho chân P1.6 P1SEL |= BIT6; // Setup timer0 TA0CCR0 = 1000; // Chọn tần số xung PWM = 1MHz/1000 = 1kHz TA0CCTL1 = OUTMODE_3 // Chọn chế độ Set/Reset TA0CCR1 = 500 // Duty cycles = 500/1000 = 50% TA0CTL |= TASSEL_2 + MC_1; // Xung clock SMCLK, Up mode (đếm đến CCR0) _bis_SR_register(LPM0_bits); while(1);}4.5 EX1: LED DIMINGPre-C10 Training Day 264Pre-C10 Training Day 265Pre-C10 Training Day 266
File đính kèm:
- training_pre_c10_day_2.pptx