IV. NGÀY HỒN THÀNH NHI ỆM VỤ:
2.3.2 Bộnhớdữ liệu
Được chia thành 5 thành phần khác nhau:
a. Một tệp thanh ghi (register file) với 32 thanh ghi cĩ độ rộng 8 bit. Tất cả các bộ
điều khiển của họ AVR đều cĩ tệp thanh ghi này.
b. 64 thanh ghi vào ra I/O, mỗithanh ghi 8 bit. Tất cả các bộ xử lý khơng phải đều cĩđúng 64 thanh ghi. Một số trong đĩ cĩ nhiều hơn số cịn lại, tùy thuộc vào số các bộ phận ngoại vi cĩ trên chip. Cá thanh ghi vào ra này thực chất là một
phần của bộ nhớ SRAM trên chip và cĩ thể đựoc truy cập hoặc nhưbộ nhớ SRAM với các địa chỉ giữa $20 và $5F hoặc nhưcác thanh ghi I/O với các địa chỉ giữa $00 và $3F. Hầu hết các thanh ghi này thường được trao đổi nhưcác thanh ghi I/O chứ khơng phải nhưbộ nhớ SRAM.
c. Bộ nhớ SRAM bên trong : bộ nhớ này cĩ trên hầu hết các loại vi xử lý họ AVR, chỉ trừ các bộ xử lý loại cơsở (baseline). Chẳng hạn nhưloại AT90S1200. Dung lượng bộ nhớ SRAM thay đổi từ 128 byte đến 4 kbyte. Bộ nhớ SRAM
được sử dụng cho ngăn xếp cũng nhưđể lưu trữ các biến. Trong thời gian cĩ ngắt và gọi đoạn chương trình (subroutine), giá trị hiện tại của bộ đếm chương trìnhđược lưu trữ trong ngăn xếp. Kích thước của ngăn xếp bị giới hạn bời bộ nhớ SRAM cĩ mặt trên chip. Vị trí của ngăn xếp được chỉ thị bời con trỏ ngăn xếp. Con trỏ ngăn xếp cĩ dung lượng 1 byte trên các vi điều khiển nhỏ hơn, chẳng hạn nhưloại AT90S8515. Byte trên các bộ xử lý lớn hơn, chẳng hạn như
loại AT90S8515. Con trỏ ngăn xếp cần phải được khởi tạo sau khi Reset và trước khi ngăn xếp cĩ thể được sử dụng. Các bộ vi xử lý này khơng cĩ bộ nhớ SRAM trên chip, chằng hạn nhưloại AT90S1200. Ngăn xếp bằng phần cứng
được thiết kế để lưu trữ các địa chỉ trả lại chương trình. Một ngăn xếp bằng phần cứng này chỉ cĩ thể lưu trữ đến 3 địa chỉ trả lại.
d. Bộ nhớ SRAM bên ngồi. Đặc tính này chỉ cĩ ở các bộ xử lý cỡ lớn trong họ vi
điều khiển AVR. Các bộ xử lý này cĩ các cổng để truy nhập bộ nhớ và dữ liệu bên ngồi (chằng hạn nhưAT90S8515) cĩ thểsử dụng bất kỳ bộ nhớ SRAM ngồi nào mà người dùng cĩ thể tùy ý quyết định khi thiếtkế.
e. EEPROM : bộ nhớ EEPROM cĩ sẵn trên hầu nhưtất cả các loại vi điều khiển họ AVR và được truy nhập theo một bản đồ bộ nhớ tách biệt. Địa chỉ bắt đầu của bộ nhớ EEPROM luơn là $0000. Các bộ xử lý khác nhau cĩ từ 64 byte đến 4 kbyte bộ nhớ EEPROM. Bộ nhớ EEPROM cĩ thể được đọc và ghi bởi bất kỳ chương trình nào. Vìđọc bộ nhớ EEPROM diễn ra nhanh hơn việc ghi vào bộ nhớ EEPROM. Bộ nhớ EEPROM cĩ thể ghi vào được khoảng 100.000 lần.
2.3.3. Sơđồ tổ chức bộ nhớ trong AVR 90S8515
2.3.4 Các thanh ghi trong AVR
Tất cả các vi điều khiển họ AVR đều cĩ 32 thanh ghi đa năng. Một số trong các thanh ghi này cịn cĩ các chức năng riêng, bổ xung. Các thanh ghi được đặt tên từ R0 đến R31. Tệp thanh ghi được tách thành 2 phần, mỗi phần cĩ 16 thanh ghi, đánh từ R0 đến R15 và từ R16 đến R31. Tất cả các lệnh thao tác trên thanh ghi đều cĩ thể truy nhập trực tiếp và truy nhập trong chương trình đơnđến tất cả các thanh ghi. Nhưng cĩ một ngoại lệ là các lệnh SBCI, SUBI, CPI, ANDI, ORI cũng nhưlệnh WI các lệnh này chỉ tácđộng đến các thanh ghi R16 đến R31. 32 thanh ghi đa mục đích 64 thanh ghi Input/Output SRAM ngồi (512 x 8) EEPRROM (512 x 8)
Bộ nhớ chương trình Bộ nhớ dữ liệu Bộ nhớ dữ liệu
Bộ nhớ Flash (4K x 16) $000 $FFF $0000 $001F $0020 $005F $0060 $025F $000 $1FF
2.3.5. Tệp thanh ghi của vi điều khiển AVR
Các thanh ghi R0 và R26 đến R31 cĩ các chức năng bổ xung. Thanh ghi R0 được sử dụng trong các lệnh nạp bộ nhớ chương trình LPM (load program memory), trong khi các thanh ghi R26đến R31 được sử dụng làm các thanh ghi con trỏ. Các thanh ghi con trỏ nàyđược sử dụng trong nhiều lệnh gián tiếp dùng cho thanh ghi (register indirect instruction).
Chúng cịn cĩ các tên X, Y và Zđược cho bởi hình sau :
2.3.6. Bộ nhớ dữ liệu SRAM
Tổ chức bộ nhớ SRAM được miêu tả tổng quát nhưhình bên dưới :
Hình 2.5 Sơđồ tổ chức thanh ghi của vi điều khiển AT90S8515
608địa chỉ bộ nhớ dữ liệu bao gồm tệp thanh ghi, bộ nhớ I/O và SRAM nội. 96 địa chỉ
đầu tiên là tệp thanh ghi đa dụng và bộ nhớ I/O, 512 địa chỉ tiếp theo là SRAM nội.
2.3.7. Bộ nhớ I/O (Các port)
Bảng 2.2 Vùng I/O trong AT90S8515.
Địa chỉ I/O Tên thanhghi I/O Chức năng $3F ($5F) SREG Status REGister
$3E ($5E) SPH Stack Pointer High $3D ($5D) SPL Stack Pointer Low
$3B ($5B) GIMSK General Interrupt MaSK register $3A ($5A) GIFR General Interrupt Flag Register $39 ($59) TIMSK Timer/Counter Interrupt MaSK $38 ($58) TIFR Timer/Counter Interrupt Flag register $35 ($55) MCUCR MCU general Control Register
$34 ($45) MCUSR MCU general Status Register $33 ($53) TCCR0 Timer/Counter0 Control Register $32 ($52) TCNT0 Timer/Counter0 (8-bit)
$2F ($4F) TCCR1A Timer/Counter1 Control Register $2E ($4E) TCCR1B Timer/Counter1 Control Register $2D ($4D) TCNT1H Timer/Counter1 High Byte $2C ($4C) TCNT1L Timer/Counter1 Low Byte
$2B ($4B) OCR1AH Timer/Counter1 Output Compare $2A ($4A) OCR1AL Timer/Counter1 Output Compare $29 ($49) OCR1BH Timer/Counter1 Output Compare $28 ($48) OCR1BL Timer/Counter1 Output Compare $25 ($45) ICR1H T/C 1 Input Capture Register $24 ($44) ICR1L T/C 1 Input Capture Register $21 ($41) WDTCR Watchdog Timer Control Register $1F ($3E) EEARH EEPROM Address Register High $1E ($3E) EEARL EEPROM Address Register Low $1D ($3D) EEDR EEPROM Data Register
$1C ($3C) EECR EEPROM Control Register $1B ($3B) PORTA Data Register, Port A
$1A ($3A) DDRA Data Direction Register, Port A $19 ($39) PINA Input Pins, Port A
$18 ($38) PORTB Data Register, Port B
$17 ($37) DDRB Data Direction Register, Port B $16 ($36) PINB Input Pins, Port B
$15 ($35) PORTC Data Register, Port C
$14 ($34) DDRC Data Direction Register, Port C $13 ($33) PINC Input Pins, Port C
$12 ($32) PORTD Data Register, Port D
$11 ($31) DDRD Data Direction Register, Port D $10 ($30) PIND Input Pins, Port D
$0F ($2F) SPDR SPI I/O Data Register $0E ($2E) SPSR SPI Status Register $0D ($2D) SPCR SPI Control Register $0C ($2C) UDR UART I/O Data Register $0B ($2B) USR UART Status Register $0A ($2A) UCR UART Control Register $09 ($29) UBRR UART Baud Rate Register
$08 ($28) ACSR Analog Comparator Control and Status
2.3.8. Thanh ghi trạng thái(Status Register – SREG)
Thanh ghi trạng thái trong AT90S8535 nằm trong vùng I/O cĩđịa chỉ$3F,được mơ tả nhưsau :
Bit 7 – I : Cho phép ngắt toàn cục (Global Interrupt Enable). Bit cho phép ngắt toàn cục phải được thiết lập bằng 1 để các ngắt được cho phép. Khi bit I được thiết lập bằng 1, từng ngắt riêng lẻ lại được điều khiển bởi các thanh ghi chức năng riêng. Khi bit I bị xĩa, tất cả các ngắt riêng lẻ sẽ bị cấm cho dù chúng cĩ được cho phép bởi các thanh ghi chức năng riêng. Bit I bị xĩa bằng phần cứng ngay sau khi cĩ một ngắt được vận hành (vào chương trình ngắt), và nĩ được thiết lập bằng 1trở lại khi gặp lệnh RETI để cho phép những ngắt tiếp theo.
Bit 6 – T : Bit truyền hay cờ truyền (Bit Copy Storage). Lệnh copy bit BLD (Bit LoaD) và BST (Bit Store) sử dụng bit T “nguồn” và “đích” của sự vận hành. Một bit từ một thanh ghi trong tệp thanh ghi cĩ thể được sao chép sang bit T bằng lệnh BST, và nội dung của bit T cĩ thể được sao chép sang một bit trong một thanh ghi của tệp thanh ghi bằng lệnh BLD.
Bit 5 – H : Cờ mang một nửa hay cờ nhớ một nửa(Half – carry Flag). Báo cho biết sự nhớ một nửa trong một vài lệnh số học.
Bit 4 – S : Bit dấu hay Cờ dấu(Sign Bit), S = N V.Bit dấu là kết quả của phép EX-OR giữa cờ phủ định N và cờ tràn bù hai V.
Bit 3 – V : Cờ tràn phép lấy bù 2 (Two’s Complement Overflow Flag). Cờ V hỗ trợ cho các phép tốn lấy bù 2.
Bit 2 – N : Cờ phủ định (Negative Flag) báo kết quả phủ định(âm) từ một sự vận hành logic hoặc số học.
Bit 1 – Z : Cờ Khơng hay cờ Zer (Zero Flag) Báo kết quả là zero từ một sự vận hành logic hoặc số học.
Bit 0 – C : Cờ nhớ (Carry Flag) Báo hiệu cĩ nhớ trong phép logic hoặc số học.
Chú ý : Thanh ghi trạng thái SREG sẽ khơng được lưu trữ tự động khi vào chương trình ngắt, cũng nhưkhơngđược trả lại ( hay “ phục hồi “) khi thốt khỏi chương trình ngắt. Cho nên người dùng phải xử lý điều này bằng phần mềm để đảm bảo chương trình chạy đúng.
2.3.9. Con trỏ ngăn xếp– SP (Stack Pointer)
Con trỏ ngăn xếp AVR 16-bitđược xây dựng gồm 2 thanh ghi 8-bit trong vùng khơng gian $3E($5E) và $3D($5D). AT90S8515 hỗ trợ đến 64Kb cho SRAM ngồi cho việc sử dụng hết 16 bits.
2.3.10. Sử dụng ngắt trong AT90S8515
AT90S8515 cung cấp 16 nguồn ngắt khác nhau. Mỗi ngắt cĩ một vectơchương trình riêng trong khơng gian bộ nhớ chương trình. Các ngắt được cho phép bởi từng bit cho phép ngắt riêng lẻ và được quản lý bit bit cho phép ngắt toàn cục. Để cho phép một ngắt nàođĩ thì bit cho phép ngắt riêng của nĩ phải được thiết lậplên 1 vàđồng thời bit cho phép ngắt toàn cục( bit I trong thanh ghi trạng thái) phải được thiết lập lên 1. Khi bit cho phép ngắt toàn cục I bị xĩa thì tất cả các ngắt sẽ bị cấm.
Những địa chỉ thấp nhất trong khơng gian bộ nhớ chương trình được định nghĩa (một cách tự động) nhưlà những vectơngắt và Reset. Bảng bên dưới sẽ liệt kêđịa chỉ của các vectơngắt và Reset. Ta cũng cĩ thể dựa vào bảng nàyđể xác định mức độ ưu tiên của các ngắt khác nhau. Địa chỉ thấp hơn thì mức độ ưu tiên sẽ cao hơn. Chẳng hạn theo bảng ta thấy, RESET cĩ mức ưu tiên cao nhất, kế đến là INT0, …
Bảng 2.3 Bảng địa chỉ các ngắt của vi điều khiển
Số tt Địa chỉ chương trình Nguồn Định nghĩa ngắt
1 $000 RESET Do Reset phần cứng, do nguồn, Watchdog
2 $001 INT0 Yêu cầu ngắt bên ngồi trên chân INT0 3 $002 INT1 Yêu cầu ngắt bên ngồi trên chân INT1 4 $003 TIMER1 CAPT Sự kiện bắt sống ở Timer/counter1 5 $004 TIMER1 COMPA So sánh Aở Timer/counter1 6 $005 TIMER1 COMPB So sánh Bở Timer/counter1 7 $006 TIMER1 OVF Tràn Timer/counter1
8 $007 TIMER0 OVF Tràn Timer/counter0
9 $008 SPI, STC Hồn thành truyền nối tiếp SPI 10 $009 UART, RX Nhận hoàn thành UART 11 $00A UART. UDRE Thanh ghi dữ liệu UART rỗng 12 $00B UART, TX Phát hồn thành UART
2.3.11. Reset
Các nguồn Reset
Viđiều khiển AT90S8515 cĩ ba nguồn Reset là:
Reset do nguồn (Power-on Reset) : MCU sẽ được Reset khi nguồn cung cấp thấp hơn ngưỡng Reset VPOT.
Reset bên ngồi (External Reset) : MCU sẽ bịReset khi cĩ mức “thấp” trên chân Reset trong khoảng thời gian lớn hơn 50ns.
Reset do Watchdog (Watchdog Reset) : MCU sẽ bịReset khi chu kỳ thời gian Watchdog kết thúc và Watchdogđược cho phép.
Trong suốt thời gian Reset, tất cả các thanh ghi I/O sẽ được đặt về giá trị mặc định của nĩ và chương trình bắt đầu thi hành từ địa chỉ $000. Lệnh đặt tại địa chỉ $000 phải là một lệnh nhảy RJMP đến chương trình xử lý Reset. Nếu chương trình khơng bao giờ sử dụng đến các nguồn ngắt, các địa chỉ vectơngắt khơng được sử dụng thì mã chương trình thơng thường cĩ thể được đặt ở các địa chỉ vectơngắt này.
2.3.12. Ngắt
AT90S8515 cĩ hai thanh ghi điều khiển che ngắt 8-bit – GIMSK (General Interrupt Mask register: Thanh ghi che ngắt chung) và TIMSK (Timer/counter Interrupt Mask register : thanh ghi che ngắt Timer/counter).
Khi một ngắt xảy ra (chương trình ngắt đang được thi hành) thì mặc định bit cho phép ngắt toàn cục I bị xĩa về 0 và tất cả các ngắt bị cấm. Tuy nhiên, người sử dụng cĩ thể dùng phần mềm để thiết lập lên 1, bit I để cho phép các ngắt lồng vào. Bit cho phép
ngắt toàn cục I sẽ được thiết lập trở lại bằng 1 khi MCU thốt khỏi chương trình ngắt (gặp lệnh RETI).
Khi bộ đếm chương trình được đặt đến địa chỉ vectơngắt thực sự để thi hành chương trình xử lý ngắt, phần cứng sẽ xĩa cờ tương ứng phát sinh ngắt này. Một vài cờ ngắt cũng cĩ thể được xĩa bằng cách viết mức logic “1” đến vị trí bit tương ứng của cờ. Nếu điều kiện ngắt xảy ra khi bit cho phép ngắt tương ứng bị xĩa bằng 0, thì cờ ngắt này sẽ được thiết lập lên 1 và nhớ cho đến khi ngắt này được cho phép hoặc là cờ bị xĩa bởi phần mềm.
Nếu một hoặc nhiềungắt xảy ra khi bit cho phép ngắt toàn cục bị xĩa, thì các cờ ngắt tươngứng sẽ được thiết lập lên 1 và nhớ cho đến khi bit cho phép ngắt toàn cục I được thiết lập lên 1 và các ngắt sẽ thi hành theo mức ưu tiên.
Chú ý : Thanh ghi trạng thái SREG sẽ khơng được lưu trữ tự động khi vào chương trình ngắt, cũng nhưkhơngđược trả lại ( hay “ phục hồi “) khi thốt khỏi chương trình ngắt. Cho nên người dùng phải xử lý điều này bằng phần mềm để đảm bảo chương trình chạy đúng.
2.3.13. Thanh ghi che ngắt chung – GIMSK (General Interrupt Mask Register)
Bit 7 – INT1 (External Interrupt Request 1 Enable) Cho phép ngắt ngoài trên chân INT1. Khi bit INT1được thiết lập lên 1 và I = 1 thì ngắt ngoài trên chân INT1được cho phép.Để quy định ngắt ngoài INT1 được kích hoạt bởi cạnh lên hay cạnh xuống hay kích hoạt mức ta sử dụng hai bit ISC10 và ISC11 trong thanh ghi MCUCR. Ngắt trên chân INT1 cĩ thể kích hoạt ngay cả khi chân nàyđược cấu hình là ngõ ra (output). Ngắt INT1 sẽ được thi hành tại địa chỉ bộ nhớ chương trình là $002.
Bit 6 – INT0 (External Interrupt Request 0 Enable) Cho phép ngắt ngoài trên chân INT0. Khi bit INT0được thiết lập lên 1 và I = 1 thì ngắt ngoài trên chân INT0 được cho phép.Để quy định ngắt ngoài INT0 được kích hoạt bởi cạnh lên hay cạnh xuống hay kích hoạt mức ta sử dụng hai bit ISC00 và ISC01 trong thanh ghi MCUCR. Ngắt trên chân INT0 cĩ thể kích hoạt ngay cả khi chân nàyđược cấu hình là ngõ ra (output). Ngắt INT0 sẽ được thi hành tại địa chỉ bộ nhớ chương trình là $001.
Bit 5 .. 0 (Reserved Bits) các bit này là bit dự trữ trong AT90S8515 và luơnđược đọc là 0.
2.3.14. Thanh ghi cờ ngắt chung – GIFR (General Interrupt Flag Register)
Bit 7 – INTF1 (External Interrupt Flag1) Cờ ngắt ngoài trên INT1. Khi sự thay đổi của cạnh xung hoặc mức logic trên chân INT1 cĩ động kích (trigger) một ngắt, thì cờ INTF1 sẽ được thiết lậplên 1. Cờ này luơn luơn được xố về 0 khi chân nàyđược cấu hình cho các ngắt ở mức thấp. Trạng thái của một ngắt mức thấp cĩ thể được xác định bằng việc đọc giá trị thanh ghi PIN.
Nếu bit I trong thanh ghi trạng thái SREG bằng 1 và bit INT1 trong thanh ghi GIMSK bằng 1, khi cĩ tác động ngắt thì MCU sẽ nhảy đến địa chỉ ngắt $002. Đối với các ngắt do sự thay đổi mức logic và cạnh, cờ ngắt sẽ được xĩa khi chương trình ngắt được thi hành.Đồng thời, cờ này cũng cĩ thể được xĩa bằng cách viết mức logic “1” lên nĩ. Bit 6 – INTF0 (External Interrupt Flag 0) Cờ ngắt ngoài trên INT0. Khi sự thay đổi của cạnh xung hoặc mức logic trên chân INT0 cĩ tácđộng kích (trigger) một ngắt, thì cờ INTF0 sẽ được thiết lập lên 1. Cờ này luơn luơn được xố về 0 khi chân nàyđược cấu hình cho các ngắt ở mức thấp. Trạng thái của một ngắt mức thấp cĩ thể được xác
định bằng việc đọc giá trị thanh ghi PIN.
Nếu bit I trong thanh ghi trạng thái SREG bằng 1 và bit INT0 trong thanh ghi GIMSK bằng 1, khi cĩ tác động ngắt thì MCU sẽ nhảy đến địa chỉ ngắt $001. Đối với các ngắt do sự thay đổi mức logic và cạnh, cờ ngắt sẽ được xĩa khi chương trình ngắt được thi hành.Đồng thời, cờ này cũng cĩ thể được xĩa bằng cách viết mức logic “1” lên nĩ. Bit 5 .. bit 0 (Reserved bits) các bit này là bit dự trữ trong AT90S8515 và luơn được
đọc là 0.
2.3.15. Thanh ghi che ngắt Timer/counter – TIMSK (Timer/counter Interrupt Mask Register)
Hình 2.12 Cấu trúc thanh ghi cờ ngắt chung - GIFR
2.3.16. Thanh ghi cờ ngắt Timer/counter – TIFR (Timer/counter interrupt FlagRegister) Register)
2.3.17. Thanh ghiđiều khiển MCU – MCUCR (MCU Control Register)
Bit 7 – Reserved bit : Bit này là một bit đặt trong AT90S8535 và luơnđược đọc là 0. Ta khơng quan tâmđến nĩ.
Bit 6 – SE (Sleep Enable) Cho phép ngủ. Bit SE phải được thiết lập (bằng1) để bắt buộc MCU vào chế độ ngủ khi lệnh SLEEP được thi hành.Để tránh trường hợp MCU