View
47
Download
2
Category
Preview:
Citation preview
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
CHƢƠNG TRÌNH SOẠN THẢO, BIÊN DỊCH VÀ NẠP
CHO MSP430
<IAR EMBEDDED WORKBENCH>
1. Giới thiệu về MSP430FG4618/F2013 Experimenter’s Board:
1.1. MSP430FG4618/F2013 Experimenter’s Board:
KIT MSP-EXP430FG4618 gồm 1 Board MSP430FG4618/F2013 như hình dưới
và 2 pin AAA 1.5V.
Hình 1.1: MSP430FG4618/F2013 Experimenter’s Board
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
Sơ đồ khối của Board MSP430FG4618/F2013 như sau:
Hình 1.2: Sơ đồ khối của MSP430FG4618/F2013 Experimenter’s Board
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
Ở bài thí nghiệm này chúng ta sẽ tìm hiểu 2 thành phần của chip MSP430FG4618 đó là
I/O port và LCD_A (module điều khiển LCD được tích hợp sẵn trên KIT)
Các dòng chip MSP430 là low power nên nó hoạt động ở nguồn khá thấp từ 1.8V-3.6V.
Ở các KIT của TI, thông thường dùng nguồn 3.5V (được chuyển đổi từ nguồn 5V từ cổng
USB)
1.2. Các khối chức năng chính trên boad:
1.2.1. Interfaces:
4 – mux LCD display:
Bộ hiển thị 4 – mux SoftBaugh LCD SBLCDA4 giao tiếp với driver ngoại vi LCD
của MSP430FG4618.
Mometary – On Push Buttons:
2 nút nhấn S1 và S2 được kết nối với I/O port P1 của MSP430FG4618.
Light Emitting Diodes (LEDs):
MSP430FG4618/F2013 Experimenter’s Board có tất cả 4 LEDs. Trong đó, 3
LEDs được nối với MSP430FG4618 và 1 LED nối với MSP430F2013.
3 led nối với MSP430FG4618 qua chân P2.1, P2.2 và P5.1
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
Buzzer:
Buzzer được nối với digital I/O port của MSP430FG4618, có thể ngắt kết nối bằng
jump JP1.
Capacitive Touch Pad :
Touchpad có dạng số 4 nằm trên board được kết nối đến các I/O port của
MSP430F2013, gồm có 16 segments.
JTAG Interfaces:
2 header JTAG có sẵn trên board gồm:
- 4-wire JTAG cho MSP430FG4618
- 2-wire Spi-Bi-wire cho MSP430F2013
1.2.2. Communication Peripherals:
Wireless:
Module giao tiếp wireless được kết nối với chế độ truyền USART của
MSP430FG4618 và được cấu hình bởi giao thức SPI, hỗ trợ các board CCxxxxEMK của
TI. CC2420EMK dùng chuẩn 802.15.4/Zigbee. CC1100EMK được cấu hình để làm việc
ở tần số sóng mang RF 868 MHz. CC2500EMK/CC2420EMK được cấu hình để làm việc
ở tần số sóng mang RF 2.4 GHz.
RS – 232:
MSP430FG4618 hỗ trợ giao tiếp nối tiếp với PC dùng chuẩn RS – 232 (9 – pins),
giao tiếp thông qua ngoại vi USCI, cấu hình bởi chế độ truyền UART.
I2C/SPI:
MSP430FG4618 và MSP430F2013 hỗ trợ các giao thức I2C và SPI, sử dụng các
ngoại vi USCI và USI.
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
1.2.3. Analog Signal Chain:
Hình 1.3: Analog Signal Chain
Microphone:
Microphone được kết nối với MSP430FG4618, có thể enable hoặc disable thông
qua 1 port kết nối.
Analog Filter:
Bộ lọc thông cao tích cực bậc 1 (1st-order active High-pass filter HPF) với tần số
cắt khoảng 340Hz có thể lọc bỏ các tần số cực thấp từ microphone. Bộ lọc thông thấp tích
cực bậc 2 Sallen-Key (2nd
-order Sallen-Key active Low-pass filter LPF) với tần số cắt cỡ
4kHz loại bỏ các nhiễu tần số cao ở ngõ ra analog của bộ chuyển đổi DAC.
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
Hình 1.4: Active Analog Filter Setup
Analog Output:
Sử dụng jack đơn 3.5 mm để lấy tín hiệu analog ngõ ra được kết nối với Op-Amp
OA2 tích hợp trên board. Đầu vào của Op-Amp được lấy từ đầu ra của bộ DAC12 của
MSP430FG4618.
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
2. Cách kết nối bộ KIT với mạch nạp và mạch nạp với máy tính.
-Kết nối KIT với mạch nạp như hình (kết nối mạch nạp với KIT qua cổng
JTAG1):
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
Thay đổi các Jump trên mạch:
Trên mạch nạp, led xanh (Power) báo hiệu nguồn, led đỏ (Mode) báo hiệu khi
mạch được nạp.
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
3. Trình soạn thảo và biên dịch
Download IAR Embedded Workbench 5.3 tại:
http://www-s.ti.com/sc/techzip/slac050.zip
Sau khi cài đặt thành công ta khởi chạy chương trình (đây chính là trình soạn thảo, biên
dịch, nạp và đồng thời là debugger cho KIT).
Icon trên desktop
3.1. Tạo project:
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
Nên tạo 1 thư mục mới để quản lý toàn bộ project
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
Khi tạo project thành công thì IDE sẽ hiện ra như hình:
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
IAR sẽ tự động tạo một file main.c và add vào project của ta, ta sẽ soạn thảo code trên đó.
Ta cũng có thể add thêm file (các header chẳng hạn) vào project bằng cách kích chuột
phải vào project > Add > Add Files…
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
3.2. Tùy chọn các thông số cho project:
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
Chọn loại chip đang sử dụng cho mạch là MSP430FG4618
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
Ở tab Debugger chọn Driver là FET Debugger
Các thông số ở các tab khác giữ nguyên.
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
3.3. Biên dịch và nạp
Sau khi code xong ta tiến hành code và biên dịch (và nạp) bằng cách bấm Ctrl+D hoặc
bấm vào biểu tượng tam giác màu xanh như hình:
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
Khi biên dịch và nạp thành công, ta có thể tiến hành debugger trực tiếp trên mạch bằng
các Step
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
Thông thƣờng ta bỏ qua bƣớc trên (Step) mà nạp thẳng vào mạch bằng cách chọn
Run (như hình)
(đoạn code đơn giản bật led sáng, giả sử led được nối với cổng P1.0 của chip)
Như vậy ta đã tiến hành code, biên dịch và nạp thành công cho KIT. Nếu sau khi nạp mà
ta thấy mạch vẫn chưa chạy như ý muốn thì có thể kiểm tra lại code hoặc debug từng
Step lại để test lỗi.
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
Chú ý: ở đây chọn Debug chứ ko phải Release
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
4. Cấu trúc một chƣơng trình C thông thƣờng cho MSP430
Các phần trong dấu <> có thể không có
Chú ý:
o Trong hàm main ta thƣờng thấy dòng lệnh:
WDTCTL = WDTPW + WDTHOLD;
Stop watchdog timer để nó khỏi reset chip. Nếu không có lệnh này (và không có
tùy chọn khác con WDTCTL) thì mạch sẽ không hoạt động.
o Trong C cho MSP430, thì có các hằng số đƣợc định nghĩa trƣớc (ở file
header), ta rất hay dùng các hằng số này:
BIT0 = 0000 0001
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
BIT1 = 0000 0010
BIT2 = 0000 0100
.
.
.
BIT7 = 1000 0000
o Một chân của MSP430 thƣờng có nhiều chức năng, ta muốn sử dụng chức
năng gì thì định nghĩa cho nó.
Ví dụ:
P1DIR = 0xFF; // toàn bộ port1 là Output
P1DIR = 0x00; //toàn bộ port1 là Input
Như vậy nếu muốn một số chân của port1 là Output và một số chân của port1 là
Input thì làm thế nào? Không giống một số VĐK khác, MSP430 không cho phép
ta tác động trực tiếp đến 1 chân nào riêng lẻ, chỉ có thể tác động lên port (8 chân).
Như vậy muốn tác động lên chân riêng lẻ nào thì ta dùng phép toán OR, AND và
XOR.
Ví dụ:
P1DIR |= BIT1; //chân P1.1 sẽ là chân Output, các chân khác ko bị ảnh hưởng bởi
lệnh này
P1DIR &= ~BIT1; // chân P1.1 sẽ là chân Input (nếu ta ko định nghĩa thì nó mặc
định là Input)
P2DIR |= BIT0 + BIT1 + BIT3; //chân P2.0, P2.1, P2.3 sẽ là Output
Lệnh trên cũng có thể viết lại: P2DIR |= 0x0B; // BIT0 + BIT1 + BIT3 = 11d=0Bh
P2DIR &= ~(BIT4+BIT5); //P2DIR &=~0x30; //chân P2.4, P2.5 là Input
o Xuất ra port theo từng bit riêng lẻ.
Như việc định nghĩa các chân, MSP430 cũng không cho ta tác động trực tiếp đến
từng chân nào, muốn xuất ra một bit hay nhiều bit bất kỳ ta sử dụng cách như đã
dùng với định nghĩa chân.
Copyright by [Trúc Đen, virus_lazy, hacker_black_hat] http://dtvt.org/
Ví dụ muốn cho P1.1=1, P1.3=1, P2.1=0
P1OUT |= BIT1+BIT3 ; //P1.1=1, P1.3=1
P2OUT &=~ BIT1 ; //P2.1=0
Hoặc có thể đảo một bit ở chân bất kỳ bằng lện XOR ^
P1OUT ^= BIT4 ; //chân P1.4 đảo trạng thái
o Kiểm tra trạng thái một chân.
Ngoài ngắt ra ta có thể kiểm tra trạng thái một chân nào đó đang ở mức thấp (0V)
hay mức cao (1.8V đến 3.6V).
Ví dụ kiểm tra chân P1.2
if( (P1IN&BIT2)==0 ) //nếu chân P1.2 bằng 0
//do anything
else
//do anything
// nếu viết if( P1IN&BIT2==0 ), thiếu 1 ngoặc là sai
CHÚC CÁC BẠN HỌC TỐT!
Recommended