Báo cáo tiểu luận MSP430
Trang 1Đại học Bách Khoa Đà Nẵng Khoa Điện Tử - Viễn Thông
Báo cáo tiểu luận MSP430
Thành viên:
Võ Thị Mẫn
Lê Bá Tuấn Bùi Hữu Tri Nguyễn Hữu Anh Khoa GVHD:
Phạm Xuân Trung
Trang 2Chương 1 : Lý thuyết
1.1 Tổng quan về MSP430 (Mixed Signal Controller).
1.1.1 Chip MSP430G2x31.
- Nguồn cung cấp: 1.8V – 3.6V
- Công suất tiêu tán cực thấp
- 5 chế độ tiết kiệm năng lượng
- Wake-up nhanh từ chế độ Standby
<1us
- Kiến trúc RISC 16 bits
- Có nhiều nguồn xung Clock để lựa
chọn
- Timer_A 16 bit với 2 thanh ghiCompare/Capture
- USI hỗ trợ I2C, SPI
- 10 bit 200kbps ADC với nguồn thamchiếu nội, Sample và Hold,Autoscan
1.1.2 Sơ đồ chân.
Trang 31.2 Hệ thống Reset, Ngắt và các chế độ hoạt động.
1.2.1 Hệ thống Reset và khởi động:
Có 2 hệ thống POR (Power on Reset) và PUC (Power UP Clear)
- POR chỉ được sinh 3 sự kiện sau:
o Cấp nguồn cho thiết bị
o Tín hiệu ở chân ~RST/NMI xuống mức thấp
Trang 4o Chốt an toàn của WDT và Flash memory bị vi phạm.
1.2.2 Hệ thông ngắt
Có 3 loại ngắt trong msp430 là: Reset hệ thống, Non-maskable NMI, maskable
1.3 Bộ nhớ và tổ chức bộ nhớ 1.3.1 Không gian địa chỉ
Bộ nhớ MSP430 theo kiến trúc von-Neumann khônggian nhớ bao gồm các thanh ghi có chức năng đặcbiệt SFRs, ngoại vi, RAM, Flash/ROM như hình bên
- Flash/ROM: độ lớn tùy thuộc vào từng dòng
chip Bộ nhớ Flash có thể sử dụng cho cảdata và code Word hoặc byte tables có thểđược lưu trữ và sử dụng ngay trên Flash màkhông cần sao chép vào RAM Interruptvector được định ở 16bytes từ 0FFE0h –0FFFFh
Trang 5- RAM: bắt đầu từ 200h, độ lớn của RAM phụ thuộc vào dòng chip và lượng RAM đang sử dụng.
- Peripheral Module: 16 bit được định ở địa chỉ từ 100h – 1FFh, được truy cập bằng word, nếu truy
cập bằng byte thì byte cao luôn luôn bằng 0 Ngoại vi 8bit từ 10h đến FFh chỉ được truy cập bằngbyte
- SFRs: 16 byte từ 0h đến 16h.
1.3.2 Tổ chức bộ nhớ
Bô nhớ được tổ chức theo các byte Các byte được đánh địa chỉ chẵn và lẽ Bộ nhớ
MSP430 còn có thể thao tác với word16bit
Một word gồm 2 byte kề nhau (High byte & Lowbyte), địa chỉ của word là địa chỉ của byte thấp, vìvậy luôn
là địa chỉchẵn
1.4 CPU
Bao gồm ALU , 16 thanh ghi 16 bit và các mạch logic để
giải mã lệnh và thực hiện chương trình
4 thanh ghi đầu: PC - là bộ đếm chương trình chứa địa chỉ
của lệnh kế tiếp , SP, SR - chứa tập hợp các cờ như C,N,Z,V
hoặc GIE hoặc CPUOFF OSC, Constant Generator - chứa
các hằng số như 1 2 4… Và 12 thanh ghi mục đích chung
Cả word và byte đề có thể được ghi vào trong thanh ghi của
CPU Khi dữ liệu ghi vào là byte thi byte cao sẽ bị xóa byte
thấp chứa giá trị của byte đưa vào
1.5 Clock Generator
Sơ đồ phần cứng và các nguồn xung clock
Trang 6- Để đồng bộ các hoạt động của Vi điều khiển
- MSP430 có nhiều nguồn xung clock để lựa chọn nhằm tối ưu hóa hiệu suất và công suất hoạtđộng Clock có thể được cấu hình để hoạt động mà không cần thành phần bên ngoài nào,hoặc với
1 điện trở, hoặc với 1 , 2 thạch anh ngoài
o Low frequency Crystal Clock LFXT1CLK: Nguồn Clock này lấy từ thạch anh ngoài gắn
vào chân XIN, XOUT Intended frequency là 32Khz là nguồn của ACLK Có thể hoạt động ởtần số cao hơn
o Crystal to Clock XT2CLK : dùng thạch anh ngoài gắn vào 2 chân XT2IN XT2OUT, mục
đích là dùng với thạch anh tần sos cao 400KHz – 6Mhz
o Digitalally Controlled Oscillator Clock (DCOCLK): clock nội, mặc định khi không cấu hình
thì dùng cho tín hiệu MCLK ở 900Khz
o Very Low Frequency (VLOCLK) là ngồn nội có công suất thấp, tấn số thấp 12Khz.
- Các tín hiệu Clock:
o Master Clock: dùng cho CPU nguồn được chọn bởi SELMx (Basic Clock System Control
Register BCSCTL 2) có thể là VLOCLK XT2CLK LFXT1CLK DCOCLK, chia tần số được lựachon bởi DIVMx
o Submaster Clock: dùng cho các ngoại vi, nguồn của nó là VLOCLK XT2CLK LFXT1CLK
DCOCLK được điều khiển bởi các bit SELS SCG (BCSCTL2), chia tần số DIVSx
o Auxillary Clock: dùng cho các module ngoại vi Nguồn chủa nó LFXT1CLK hoặc VLOCLK,
có thể chia tần số 1 2 4 8 lần
1.6 Ngõ ra/ vào
1.6.1 Cấu trúc xuất nhập:
o Gồm 8 port xuất nhập từ P0 -> P7
o Mỗi port gồm 8 chân
o Mỗi chân có thể làm đầu vào hay đầu ra,có thể được đọc hay được ghi riêng lẻ
o Port P1 và P2 có khả năng ngắt
o Mỗi ngắt được cấu hình theo cạnh lên,cạnh xuống của sườn xung hoặc theo tín hiệu vàotương ứng với các vector ngắt
Trang 71.6.2 Đặc tính xuất nhâp:
o chức năng của chân không phụ thuộc vào việc lập trình
o có thể làm input hay output
o P1 và P2 được cấu hình riêng cho ngắt
o không phụ thuộc vào thanh ghi input hay output
o cấu hình có điện trở kéo
1.6.3 Hoạt động xuất nhập:
o Được lập trình bằng phần mềm
1.6.4 Thanh ghi input
o Bit=0:đầu vào ở mức thấp
o Bit =1:đầu vào ở mức cao
1.6.5 Thanh ghi output:
o Khi không sử dụng điện trở kéo,giá trị các thanh ghi tương ứng:
o Bit=0:đầu vào ở mức thấp
o Bit =1:đầu vào ở mức cao
o Khi không sử dụng điện trở kéo,giá trị tương ứng:
o Bit=0: điện trở kéo xuống
o Bit =1: điện trở kéo lên
1.6.6 Thanh ghi định hướng PxDIR:
o Các chân làm đầu vào hay đầu ra được định hướng bởi các bit của thanh ghi PxDIR
o Bit=0:chân được định hướng làm đầu vào(chú ý dễ nhầm lẫn với PIC)
o Bit =1:chân được định hướng làm đầu ra
1.6.7 Thanh ghi cho phép điện trở kéo PxREN:
o Mỗi bit của thanh ghi PxREN cho phép hay không cho phép điện trở kéo
o Bit=0: điện trở kéo xuống
o Bit =1: điện trở kéo lên
1.6.8 Thanh ghi lựa chọn chức năng PxSEL PxSEL2:
o Các bit của thanh ghi PxSEL và PxSEL2 được sử dụng để lựa chọn chức năng là Port xuất nhậphay các chức năng đặc biệt khác
PxSEL2 PxSEL Chức năng của chân
0 1 Module đầu tiên được lựa chọn
1 1 Module ngoại vi thứ 2 được lựa chọn
Lưu ý: khi PxSEL=1,các ngắt của P1 và P2 bị cấm
1.6.9 Các ngắt P1 và P2:
o Mỗi chân của P1 và P2 đều có khả năng ngắt
o Ngắt đươc cấu hình bởi thanh ghi PxIFG, PxIE và PxIES
o Sử dụng thanh ghi PxIFG để xác định nguyên nhân ngắt của P1 và P2
a) Thanh ghi cờ ngắt P1IFG và P2IFG
o Mỗi bit của thanh ghi PxIFGx là 1 cờ ngắt tương ứng với chân xuất nhập và khi có cạnh xung tín hiệu tại các chân.tất cả các cờ ngắt của thanh ghi PxIFGx đòi hỏi 1 ngắt tương ứng với các bit PxIE
và GIE đươc set
o Mỗi cờ ngắt được reset bằng phần mềm
o Phần mềm có thể set cờ ngắt
o Bit=0: không có cờ ngắt nào
o Bit =1: có 1 ngắt đang chờ
1.6.10 Thanh ghi lựa chọn ngắt bằng sườn xung P1IES và P2IES.
o Bit=0: cờ ngắt được set lên khi có cạnh lên của xung
o Bit =1: cờ ngắt được set lên khi có cạnh xuống của xung
1.6.11 Thanh ghi cho phép ngắt P1IE và P2IE
o Bit=0: cấm ngắt
o Bit =1: cho phép ngắt
Trang 81.7 Timer_A
1.7.1 Giới thiệu về Timer_A:
Timer_A có:
o 16bit timer/counter với 4 chế độ hoạt động: Stop, Up, Continuous, Up/Down
o Nguồn xung clock có thể lựa chọn và cấu hình từ nhiều nguồn khác nhau
o 3 thanh ghi Capture/Compare (TACCRx)
o PWM
o 2 vector ngắt : TACCR0 và TAIV
Trang 91.7.2 Sơ đồ phần cứng Timer_A
1.7.3 Các thanh ghi sử dụng trong Timer_A:
1.7.4 Lựa chọn nguồn xung clock cho Timer_A:
o Nguồn xung clock cho timerA có thể được lựa chọn từ nguồn xung clock : ACLK, SMCLK hay từnguồn bên ngoài TACLK, INCLK thông qua việc lựa chọn các bit TASSELx(TACTL) Cụ thể:
1.7.5 Các chế độ hoạt động của Timer_A:
TimerA có 4 chế độ hoạt động : Stop, Up, Continuous, Up/Down được lựa chọn bởi các bitMCx(TACTL).Cụ thể:
MCx Mode Description
00 Stop TimerA không hoạt động
01 Up Timer_A đếm lặp lại từ 0 đến giá trị thanh ghi TACCR0
10 Continuous Timer_A đếm lặp lại từ 0 đến giá trị FFFFh
11 Up/Down Timer_A đếm lặp lại từ 0TACCR00
Timer_A hoạt động ngay khi giá trị các bit MCx khác 00 và nguồn xung clock được chọn choTimer_A hoạt động
Trang 10Khi TimerA hoạt động ở chế độ Up hoặc Up/Down, timer sẽ dừng hoạt động khi ghi giá trị 0vào thanh ghi TACCR0
1.7.5.1 Up Mode:
Thay đổi giá trị thanh ghi TACCR0 khi timer đang hoạt động:
+ Nếu giá trị mới bằng hay lớn hơn giá trị cũ hay lớn hơn giá trị hiện tại, Timer sẽ đếm đến giá trịmới
+ Nếu giá trị mới bé hơn giá trị hiện tại, timer sẽ đếm lại từ giá trị 0
o Cấu hình Timer_A hoạt động ở chế độ Up:
Cho phép ngắt TACCR0 CCIFG:
CCIE =1 trong thanh ghi TACCTL0
Nạp giá trị vào thanh ghi TACCR0:
TACCR0 = xxxx
Lựa chọn nguồn xung clock dùng cho Timer_A
thiết lập giá trị các bits TASSELx trong thanh ghi TACTL
Thiết lập giá trị chia cho xung clock:
thiết lập bits IDx trong thanh ghi TACTL (mặc định IDx = 00 /1)
Lựa chọn timer_A hoạt động ở chế độ Up:
thiết lập MCx = 01 trong TACTL
Code cho chương trình ngắt…
1.7.5.2 Continuous Mode:
Cấu hình Timer_A hoạt động ở chế độ Continuous: Tương tự như trên
1.7.5.3 Up/Down Mode:
Trang 11o Thay đổi giá trị thanh ghi TACCR0 khi timer đang hoạt động:
• Nếu timer đang trong chiều đếm xuống, timer sẽ tiếp tục đếm xuống đến 0
• Nếu timer đang trong chiều đếm lên và giá trị mới lớn hơn hay bằng giá trị cũ hay lớn hơn giá trịhiện tại, timer sẽ đếm đến giá trị mới trước khi đếm xuống
• Nếu timer đang trong chiều đếm lên và giá trị mới bé hơn giá trị giá trị hiện tại, timer sẽ bắt đầuđếm xuống
o Cấu hình Timer_A hoạt động ở chế độ Up:
Tương tự như trên
1.7.6 Compare Mode:
Compare mode được lựa chọn khi bit CAP()=0(mặc định)
Compare mode dùng để tạo ra khoảng thời gian hay điều chế độ rộng xung PWM
Compare mode hoạt động dựa trên nguyên tắc so sánh giá trị của thanh ghi timer_A(TAR) với giátrị thanh ghi TACCRx
Khi giá trị của TAR bằng giá trị của TACCRx thì sẽ xuất hiện các sự kiện:
• Cờ ngắt CCIFG =1
• EQUx = 1
• EQUx ảnh hưởng đến lối ra PWM
• Tín hiệu CCI lật sang SCCI
OUTMODx Mode Description
khi timer được reset hay khi 1 output mode khác được lựa chọn và ảnh
hưởng đến lối ra
chu kì timer
1 output mode khác được lựa chọn và ảnh hưởng đến lối ra
Cấu hình PWM:
Cấu hình chức năng I/O nhận chức năng ra OUTx của PWM:
Vì các chân P1.1 P1.2 và P1.3 là những chân ra của PWM nên cần cấu hình các bits tương ứngtrong thanh ghi P1DIR và P1SEL Ví dụ: P1DIR = 0x0C, P1SEL= 0x0C chọn chân P1.2 và P1.3 là chân raPWM của CCR1 và CCR2
Nạp giá trị cho TACCR0, TACCRx
Lựa chọn thanh ghi capture/compare để tạo PWM :
Trang 12Thiết lập các bit OUTMODx trong thanh ghi TACCTLx tương ứng.
Lựa chọn nguồn xung clock, hệ số chia và chế độ hoạt động cho Timer_A :
Thiết lập các bit TASSELx, IDx và MCx trong thanh ghi TACTL
1.7.8 Ngắt Timer_A:
Timer_A có 2 vector ngắt:
Vector ngắt TACCR0 cho TACCR0 CCIFG
Vector ngắt TAIV cho TAIFG và CCIFGs của CCR1 và CCR2
Cờ ngắt CCIFG của TACCR1 và TACCR2 cũng được tự động reset khi thoát khỏi chươngtrình ngắt
Nếu có 1 ngắt khác xảy ra khi đang thực hiện ngắt, ngắt khác đó sẽ được thực hiện ngaylập tức sau khi ngắt trước được thực thi xong
- Có thể lấy nhiều kênh cùng lúc
- Điều khiển chuyển đổi dữ liệu và tự độnglưu trữ mẫu đã lấy
- Có ngắt
Trang 131.8.1 Phần cứng và hoạt động:
- ADC10 được cấu hình bởi 2 thanh ghi ADC10CTL0
và ADC10CTL1 và 2 thanh ghi này chỉ được thay
đổi khi ENC = 0; khi bắt đầu lấy mẫu thì phai đưa
ENC = 1;
- Nadc = 1023
- Lựa chọn kênh ADC: ADC10AEx bits
- Voltage Reference Generator: Nguồn nội 1.5V 2.5V
hoặc Vcc được lựa chọn dựa vào bit REFON
REF2_5 REFOUT
- Sample and Conversion Timing: SHTx lựa chọn chu
kì lấy mẫu 4 8 16 64xADC10CLK,
- Conversion Mode:
CÓNEQx MODE
00 Single chanel – Single Conversion
01 Sequence of channels
10 Repeat single channels
11 Repeat Sequence of channels
1.8.2 Mode Single Chanel – Single
Conversion.
- Sau khi bật chuyển đổi ADC10
(ADC10ON) và thiết lập kênh lấy ADC
(INCHx)
- Đợi ENC và ADC10SC được kích hoạt
thì bắt đàu chuyển đổi
- Lấu mẫu dữ liệu vào khi tín hiệu
SAMPCON ở mức cao với tốc độ là
4/8/16/64x ADC10CLK
- Quá trình chuyển đổi dữ liệu sau đó sẽ
mất thêm 12xADC10CLK
- Lưu kết quả vào ADC10MEM và set
cờ ADC10IFG mất thêm 1 ADC10CLK
- Trong quá trình thực hiện từng bược
trên nếu có thay đổi tín hiệu SHS, ENC
Trang 14ADC10SC thì quá trình sẽ nhảy về trạng
thái đợi 1 hoặc tất cả các tín hiệu trên
được set trở lại
1.8.3 Mode Single of Sequence
- Được phân tích giống mode trên nhưngkhác ở chỗ là quá trình tự kết thúc khicác kênh lựa chọn đã được lấy mẫu hếtđiều này được báo bằng tín hiệu EOS.xnếu tín hiệu này bằng 1 quá trình chuyễnđổi các kênh đã xong
1.8.4 Các bit hay dùng trong ADC
Trong thanh ghi ADCCTL1
Trang 15o INCHx (4bits) : lựa chọn kênh lấy ADC.
o ADC10DIVx (2bits) : ADC10
Clock Divider
o ADC10SSELx (2bits): Clock
source select
Trong thanh ghi ADCCTL0
o SREFx (3bits): Chọn nguồn
o REFON (1bit): bật nguồn
tham chiếu nội ->REF2_5V
(1bit) nguồn nội là 1.5V hay
Cách cấu hình đơn giản cho ADC hoạt động.
1.8.5 ADC10 DATA TRANFER CONTROLLER
- Được kích hoạt nếu giá trị thanh ghi ADC10DTC1 khác không
- Khi ADC10 chuyên đổi xong giá trị được đẩy vao ADC10MEM, bộ chuyển dữ liệu được kíchhoạt.Mỗi DTC tranfer cần 1 chu kỳ MCLK Có 2 chế độ: One block và two block tranfer
1.8.6 ADC10 Interupt
- Một ngắt và một vector ngắt đi kèm với bộ ADC10
- Khi DTC không được dùng thì ADC10IFG được set khi quá trình chuyển đổi ADC đã xong và dữliệu được load vào ADC10MEM Khi dùng DTC thì ADC10IFG được set khi khi việc chuyển vào bộnhớ 1 block hoàn thành.Nếu bit GIE và ADC10IE được set thì khi ADC10IFG được set thì sẽ tạo rangắt
1.9 UART
1.9.1 Giới thiệu :
o Là bộ truyền nhận dữ liệu nối tiếp bất đồng bộ
o Khi kết hợp với mỗi thiết bị chuyển đổi điện áp khác nhau nó tạo ra 1 chuẩn giao tiếp khácnhau ( vd: chuẩn RS232 thông qua MAX232,…)
o Dữ liệu được đóng gói thành các khung truyền trước khi truyền đi, một khung truyền baogồm :
o Start bit (=0): báo cho thiết bị nhận chuẩn bị có dữ liệu truyền đến
Trang 16o Data : là phần dữ liệu gửi đi ngay sau start bit
o Parity bit : là bit được thêm vào để kiểm tra dữ liệu sau khi truyền
o Stop bit : thường là 1 bit hoặc 2 bit dùng để báo kết thúc một khung truyền
o Tốc độ baud ( số bit truyền trong 1s) ở cả 2 thiết bị truyền và nhận phải giống nhau
1.9.2 Hoạt động:
o USCI_UART được reset bởi PUC hoặc set bit UCSWRST
o USCI_UART hoạt động khi clear bit UCSWRST
o Hoạt động nhận dữ liệu của UART
o Sau khi clear bit UCSWRST, bộ nhận dữ liệu và bộ tốc độ baud sẵn sàng và ở trạng tháichờ
o Khi phát hiện start bit thì quá trình nhận dữ liệu bắt đầu và ngược lại khi không phát hiệnstart bit thì quay về trạng thái chờ
o Hoạt động truyền dữ liệu của UART
o Sau khi clear bit UCSWRST, bộ nhận truyền dữ liệu và bộ tốc độ baud sẵn sàng và ở trạngthái chờ
o Khi có dữ liệu ghi vào thanh ghi UCAxTXBUF thì quá trình truyền dữ liệu bắt đầu
o Dữ liệu được truyền vào Transmit shift register khi thanh ghi này rỗng và tiếp tục đượctruyền sang thiết bị nhận
o Cờ UCAxTXIFG được set khi mà UCAxTXBUF đã sẵn sàng cho dữ liệu tiếp theo
o Nếu dữ liệu không được ghi vào UCAxTXBUF thì bộ UART lại tiếp tục vào trạng thái chờ
1.9.3 Thiết lập tốc độ baud :
Có 2 chế độ thiết lập, được lựa chọn bằng bit UCOS16
o BITCLK = tốc độ baud
o Tốc độ baud này được tính từ xung BRCLK qua hệ số chia N = (fBRCLK / Baud rate), do
đó hệ số N thường không phải là số nguyên.Vì vậy để tăng độ chính xác, ngoài bộ chia divider còn có bộ điều biến modulator
o Để thiết lập tốc độ baud với các độ chính xác khác nhau, ta sử dụng bảng
o “ Commonly used Baud Rates“ của msp430 để thiết lập các giá trị cho UCBRx, UCBRFx, UCBRSx
1.9.4 Ngắt UART :
+Transmit interrupt
o Cờ ngắt UCAxTXIFG được set khi thanh ghi UCAxTXBUF đã sẵn sàng nhận dữ liệu mới cần truyền
o Để xảy ra ngắt thì cờ UCAxTXIE và GIE cần được set
o Cờ ngắt UCAxTXIFG tự động reset khi dữ liệu được ghi vào UCAxTXBUF
+ Receive interrupt
o Cờ ngắt UCAxRXIFG được set dữ liệu được nhận và chứa trong thanh ghi UCAxTXBUF đã
o Để xảy ra ngắt thì cờ UCAxTXIE và GIE cần được set
o Cờ ngắt UCAxRXIFG tự động reset khi dữ liệu được đọc ra khỏi UCAxRXBUF
Thanh ghi :
o UCAxCTL0 : thanh ghi điều khiển 0
o UCAxCTL1 : thanh ghi điều khiển 1
o IE2 : thanh ghi điều khiển ngắt
o UCAxBRO : thanh ghi tạo hệ số chia tần
o UCAxBR1 : thanh ghi tạo hệ số chia tần