Trình phục vụ ngắt và bảng vector ngắt

Một phần của tài liệu điều khiển từ xa các thiết bị bằng tin nhắn sms (Trang 48)

Đối với mỗi ngắt thì phải có một trình phục vụ ngắt ISR (Interrupt Service Routine) hay trình quản lý ngắt (Interrupt Handler). Khi một ngắt được gọi thì bộ Vi điều khiển phục vụ

ngắt. Khi một ngắt được gọi thì bộ Vi điều khiển chạy chương trình phục vụ ngắt. Đối với mỗi ngắt thì có một vị trí cố định trong bộ nhớđể giữ địa chỉ ISR của nó. Nhóm các vị trí nhớđược dành riêng để gửi các địa chỉ của các ISR được gọi là bảng vector ngắt. Khi kích hoạt một ngắt bộ Vi điều khiển đi qua các bước sau:

• Vi điều khiển kết thúc lệnh đang thực hiện và lưu địa chỉ của lệnh kế tiếp (PC) vào ngăn xếp.

• Nó nhảy đến một vị trí cốđịnh trong bộ nhớđược gọi là bảng vector ngắt nơi lưu giữ địa chỉ của một trình phục vụ ngắt.

• Bộ Vi điều khiển nhận địa chỉ IRS từ bảng vector ngắt và nhảy tới đó. Nó bắt đầu thực hiện trình phục vụ ngắt cho đến lệnh cuối cùng của ISR là RETI (trở về từ ngắt).

• Khi lệnh thực hiện RETI bộ Vi điều khiển quay trở về nơi nó đã bị ngắt. Trước hết nó nhận địa chỉ của bộđếm chương trình PC từ ngăn xếp bằng cách kéo hai byte trên

Trang 49 c. Các ngắt ngoài

Atmega 8 có 2 ngắt ngoài từ INT0 đến INT1 (ở đây chưa kể tới ngắt Reset). Ngắt này tương ứng với 2 chân của vi điều khiển là INT0, INT1 Để ý là ngay cả khi các chân INT0, INT1 của vi điều khiển được cấu hình như là chân lối ra thì các ngắt ngoài vẫn có tác dụng nếu được cho phép.

Các ngắt ngoài có thể bắt mẫu theo kiểu cạnh lên (Rising), cạnh xuống (Falling) hay mức thấp (Low level). Điều này được quy định trong thanh ghi GICR. Dưới đây là mô tả chi tiết thanh ghi GICR và các thanh ghi liên quan tới các ngắt ngoài.

Thanh ghi GICR (The General Interrupt Control Register)

Tám bit của thanh ghi GICR sẽđiều khiển kiểu bắt mẫu cho INT1, INT0.

Thanh ghi MCUCR – Control Register

Trong phần này ta chỉ quan tâm tới 2 bit là bit IVCE (Interrupt Vector Select) và bit IVSEL (Interrupt Vector Change Enable) của thanh ghi MCUCR. Bit này liên quan đến việc thiết lập vị trí bảng vector ngắt.

Bit 1 – IVSEL: khi bit này là 0 vị trí của bảng vector ngắt được đặt ở phần đầu bộ

nhớ chương trình. Khi bit này là 1 thì bảng vector ngắt được di chuyển tới phần đầu của vùng nhớ Boot Loader.

Bit 0 – IVCE: bit này phải được ghi thành 1 để cho phép thay đổi bit IVSEL. Bit IVCE đang set các ngắt sẽ bị cấm cho tới khi bit IVSEL được ghi, nếu bit IVSEL không được ghi thì các ngắt vẫn bị cấm trong 4 chu kỳ máy liên tiếp (sau 4 chu kỳ

máy thì bit IVCE sẽ tựđộng bị xóa nên các ngắt được cho phép trở lại).

3.3.2.6 Bộ chuyển đổi của Vi điều khiển Atmega 8

Trang 50

Bộ chuyển đổi ADC của Atmega 8 có chức năng chuyển đổi tín hiệu tương tự có giá trị

thay đổi trong một dải biết trước thành tín hiệu số. Bộ ADC của Atmega 8 có độ phân giải 10 bit, sai số tuyệt đối ± 2 LSB, dải tín hiệu ngõ vào từ 0V – VCC, tín hiệu ngõ vào có nhiều lựa chọn như có 8 ngõ vào đa hợp đơn hướng (Multiplexed Single Ended), 7 ngõ vào vi sai (Differential Input). Bộ ADC của Atmega 8 là loại ADC xấp xỉ liên tiếp (Succesive Approximation ADC) với 2 chế độ hoạt động có thể lựa chọn là chuyển đổi liên tục (Free Running) và chuyển đổi từng bước (Single Conversion).

Hình 3.9 Sơđồđơn giản của một khối ADC

Nguyên tắc hoạt động của khối ADC là tín hiệu tương tựđưa vào ngõ ADC0 đến ADC7

được lấy mẫu và biến đổi thành tín hiệu số tương ứng. Tín hiệu số được lưu trong 2 thanh ghi ACDH và ADCL. Một ngắt có thể được tạo ra khi hoàn thành một chu trình biến đổi ADC. Thực tế, bộ ADC của Atmega 8 phức tạp hơn nhiều. Tuy nhiên cơ sở vẫn dựa vào nguyên tắc trên. Để khảo sát bộ ADC của Atmega 8 ta sẽ tìm hiểu các khối chức năng sau:

Điện thế tham chiếu: là giá trị điện thế dùng để so sánh với điện thế của tín hiệu tương tự cần biến đổi ở ngõ vào ADC. Atmega 8 có 3 lựa chọn điện thế tham chiếu là AVCC bằng với VCC, điện thế tham chiếu nội 2.56V, và Vref là tùy chọn. AVR có 2 nguồn điện tham chiếu nội là Intenal Reference = 2.56V và Bandgap Reference = 1.24V. Điện thế Bandgap Reference là một hằng số vật lý, nó luôn là 1.24V, còn điện thế Internal Reference thì có thể thay đổi tùy theo các dòng chip khác nhau. Trong AVR, Internal Reference được tạo ra từ Bandgap Reference.

Tần số Clock ADC: là tần số Clock cung cấp cho bộ biến đổi ADC, giá trị có thể

Trang 51

200KHz cho độ phân giải 10 bit và có thể cao hơn 200MHz nếu độ phân giải thấp hơn.

Ngõ vào tương tự: Atmega 8 có 2 lựa chọn ngõ vào tương tự

- 10 ngõ vào đơn hướng (Single Ended): 10 ngõ vào này là ADC0 đến ADC7, AGND và Bandgap Reference. Thực tế thường dùng 8 ngõ vào ADC0 đến ADC7. Vì có 8 ngõ vào đó nên ta có thể đưa vào 8 tín hiệu tương tự khác nhau. Khi lựa chọn ngõ vào kiểu đơn hướng thì kết quả chuyển đổi được tính như sau:

ef 1024 in r V ADC V ∗ =

- Ngõ vào vi sai: ta có thể đưa 2 tín hiệu tương tự vào ngõ ADC, 2 tín hiệu tương tự

này sẽ qua một bộ vi sai (mạch trừ), kết quảở ngõ ra có thểđược khuếch đại rồi sau

đó mới đưa vào khối ADC để biến đổi. Bộ vi sai có 2 ngõ vào là Vpos (ngõ vào dương) và Vneg (ngõ vào âm). Các chân ADC3 đến ADC7 dùng làm ngõ vào dương, các chân ADC0 đến ADC2 là ngõ vào âm. Đối với lựa chọn này, kết quả ADC sẽ là:

os ef ( p neg) 512 r V V Gain ADC V − ∗ ∗ =

Ởđây Gain là độ lợi có thể tùy chọn. Công thức trên cho thấy kết quả ADC có thể là số âm khi Vpos < Vneg. Do đó dải giá trị của ADC trong trường hợp này là -512 đến 511. Vì vậy, kết quả trong thanh ghi ADC được biểu diễn dưới dạng số bù 2. Để biết được kết quả là số

âm hay dương ta phải kiểm tra bit ADC9 trong thanh ghi ADCH, nếu bit này là 0 thì kết quả

là số dương.

Lưu ý: điện thế qua bộ vi sai có thể âm, nhưng điện thế cấp ở các ngõ vào ADC0 đến ADC7 (cho cả 2 trường hợp ngõ vào vi sai và ngõ vào đơn hướng) phải luôn nằm trong khoảng 0V – AVCC.

Trang 52

Hình 3.10 Ngõ vào vi sai Chếđộ hoạt động: có hai chếđộ hoạt động của bộ ADC

- Chuyển đổi liên tục (Fee Running): là chế độ mà sau khi khởi động thì bộ ADC thực hiện chuyển đổi liên tục không ngừng.

- Chuyển đổi từng bước (Single Conversion): là mà bộ ADC sau khi hoàn thành một chuyển đổi thì sẽ ngừng, một chuyển đổi tiếp theo chỉđược bắt đầu khi phần mềm có yêu cầu chuyển đổi tiếp.

b. Các thanh ghi của bộ chuyển đổi ADC

Thanh ghi ADCMUX – Multiplexer Selection

Bit 7, 6 – REFS1, 0 (Reference Selection Bits): hai bit này dùng để lựa chọn điện thế

tham chiếu là một trong 3 nguồn là AVCC, điện thế tham chiếu nội 2.56V và Vref. Nếu chọn điện thế Vref thì các tùy chọn còn lại không được sử dụng để tránh bị ngắn mạch, điều này có nghĩa là nếu ta chọn điện thế tham chiếu là Vref rồi, thì trong suốt quá trình hoạt động của bộ ADC ta không được lựa chọn điện thế tham chiếu khác, vì nếu không thì nguồn điện thế Vref bên ngoài do chưa được tháo đi sẽ làm hỏng chip do ngắn mạch.

Trang 53

Bit 5 – ADLAR (ADC Left Adjust Result): bit này lựa chọn cách bố trí dữ liệu trong 2 thanh ghi dữ liệu ADCH và ADCL.

Bit 4, 0 – MUX 4, 0 (Analog Channel and Gain Selection Bits): các bit này lựa chọn kiểu ngõ vào (đơn hay vi sai) và độ lợi.

Thanh ghi ADCSRA – Control and Status Register A

Bit 7 – ADEN (ADC Enable): bit này có giá trị 1 sẽ cho phép bộ ADC hoạt động, có giá trị 0 sẽ ngừng bộ ADC ngay cả khi nó đang trong quá trình biến đổi.

Bit 6 – ADSC (ADC Start Conversion): ghi bit này thành 1 để bắt đầu quá trình chuyển đổi. Trong chế độ chuyển đổi từng bước, sau mỗi lần chuyển hoàn thành bit này bị xóa về 0, ta phải Set lại bit này để bắt đầu một biến đổi tiếp theo. Trong chếđộ

chuyển đổi liên tục, ta chỉ cần Set bit này một lần.

Bit 5 – ADFR (ADC Free Running Select): Set bit này lên 1 để lựa chọn chế độ hoạt

động biến đổi liên tục. Bit này là 0 sẽ cho phép chếđộ biến đổi từng bước.

Bit 4 – ADIF (ADC Interrupt Flag): bit này sẽ được set thành 1 khi một chu trình biến đổi ADC hoàn thành, bit này được xóa bởi phần cứng khi trình phục vụ ngắt tương ứng được thực thi. Chú ý là khi ta chỉnh sửa thanh ghi ADCSRA (như dùng các lệnh CBI, SBI) thì bit này sẽ bị xóa. Vì vậy, để xóa bit này bởi phần mềm, ta chỉ

cần ghi giá trị 1 vào nó.

Bit 3 – ADIE (ADC Interrupt Enable): bit này cho phép ngắt ADC, khi bit ADIE (cho phép ngắt ADC) và bit I (cho phép ngắt toàn cục) trong thanh ghi SREG được Set lên 1 sẽ cho phép ngắt ADC hoạt động.

Bit 2, bit 1, bit 0 – ADP2, ADP1, ADP0 (ADC Prescaler Select Bits): vì tần số Clock ADC được lấy từ xung Clock hệ thống (Hình 3.12), nên các bit ADP2, ADP1, ADP0 sẽ cho phép chia xung Clock hệ thống với các hệ số xác định (bảng 3.3) trước khi

đưa vào nguồn Clock ADC. Với độ phân giải 10 bit, tần số clock ADC khoảng từ 50 – 200 KHz, nên tùy theo tần số Clock hệ thống mà ta lựa chọn hệ số chia thích hợp.

Trang 54

Hình 3.11 Nguồn clock ADC

ADPS2 ADPS1 ADPS0 Hệ số chia

0 0 0 2 0 0 1 2 0 1 0 4 0 1 1 8 1 0 0 16 1 0 1 32 1 1 0 64 1 1 1 128

Bảng 3.2 Bảng lựa chọn các hệ số chia cho nguồn clock ADC Thanh ghi ADC Data Register – ADCL và ADCH

Trang 55

Đây là hai thanh ghi chứa kết quả ADC, tùy theo thiết lập của bit ADCLAR (trong thanh ghi ADMUX) mà 10 bit dữ liệu ADC có thể được bố trí về phía phải hay trái của hai thanh ghi ADCH và ADCL.

3.3.2.8 Giao tiếp USART

Ở Vi điều khiển Atmega8, việc thu phát nối tiếp đồng bộ và không đồng bộđược hỗ trợ

trên cùng một nhóm các chân I/O, gọi là bộ truyền nhận USART (Universal Synchronous Asynchronous Receiver Transmiter). Điều này giúp tiết kiệm được một số port I/O để phục vụ cho mục đích khác. Hơn nữa, với hai bộ USART hoạt động độc lập, việc thực hiện điều khiển vào/ra dữ liệu trở nên rất linh hoạt.

Trang 56

Hình 3.12: Sơđồ khối bộ USART

a. Các chế độ truyển nhận dữ liệu của bộ USART

Chế độ truyền đồng bộ (Synchronous): là kiểu truyền dữ liệu trong đó bộ truyền (Transmitter) và bộ nhận (Receiver) sử dụng chung một xung đồng hồ (Clock). Do

đó, hoạt động truyền và nhận dữ liệu diễn ra đồng thời. Xung Clock đóng vai trò là tín hiệu đồng bộ cho hệ thống (gồm khối truyền và khối nhận). Ưu điểm của kiểu truyền đồng bộ là tốc độ nhanh, thích hợp khi truyền dữ liệu khối (Block).

Trang 57

Chế độ truyền bất đồng bộ (Asynchronous): là kiểu truyền dữ liệu trong đó mỗi bộ

truyền và bộ nhận có bộ tạo xung Clock riêng, tốc độ xung Clock ở hai khối này có thể khác nhau, nhưng thường không quá 10%. Do không dùng chung xung Clock, nên để đồng bộ quá trình truyền và nhận dữ liệu phải truyền các bit đồng bộ (Start, Stop… ) đi kèm với các bit dữ liệu. Các bộ truyền và nhận sẽ dựa vào các bit đồng bộ

này để quyết định khi nào thì sẽ thực hiện hay kết thúc quá trình truyền hoặc nhận dữ

liệu.

b. Các thanh ghi thực hiện truyền – nhận USART

Thanh ghi dữ liệu vào/ra UDR

Các thanh ghi dữ liệu vào/ra USART trên thực tế là hai thanh ghi tách biệt nhau nhưng dùng chung một địa chỉ vật lý. Khi dữ liệu được ghi vào địa chỉ này, nó chỉ vào thanh ghi truyền dữ liệu, và khi đọc dữ liệu từđịa chỉ này nó đọc từ thanh ghi nhận dữ liệu.

Thanh ghi trạng thái và điều khiển A – USCRA

Thanh ghi trạng thái được sử dụng để giám sát trạng thái và điều khiển USART.

• Bit 7 – RXC (USART Receiver Complete): bit cờ này được thiết lập khi có dữ liệu chưa đọc trong bộđệm nhận và được xóa khi bộđệm này trống. Cờ RXC có thểđược dùng để tạo ngắt Receiver Complete.

• Bit 6 – TXC (USART Transmit Complete): cờ này được thiết lập khi toàn bộ khung trong thanh ghi dịch phát được dịch hết ra ngoài và không có dữ liệu mới đang tồn tại trong bộ đệm phát UDR. Bit cờ TXC được tự động xóa khi có ngắt Transmit Complete, hoặc nó có thểđược xóa bằng cách ghi 1 vào vị trí bit của nó. Cờ TXC có thể tạo ngắt Transmit Complete.

• Bit 5 – UDRE (USART Data Register Empty): cờ này chỉ ra khi nào bộđệm phát sẵn sàng để nhận dữ liệu mới. Khi UDRE là 1 thì bộ đệm rỗng và do đó sẵn sàng để ghi

Trang 58

vào. Cờ UDRE có thể sinh ngắt Data Register Empty. Cờ UDRE được Set sau một Reset để chỉ ra bộ phát đang sẵn sàng.

• Bit 4 – FE (Framing Error): bit này được Set nếu ký tự tiếp theo trong bộđệm thu có lỗi khung khi được nhận về. Bit này bằng 0 khi bit dừng của dữ liệu nhận được bằng 1. Luôn Set bit này về 0 khi ghi vào UCSRA.

• Bit 3 – DOR (Overrun Error): bit này được đặt thành 1 khi có hiện tượng tràn dữ liệu (một dữ liệu trong UDR không được đọc trước khi một dữ liệu mới được dịch chuyển vào UDR từ thanh ghi bộ nhận USART).

• Bit 2 – PE (Parity Error): bit này được Set nếu ký tự tiếp theo trong bộ đệm có lỗi chẵn lẻ khi nhận được về và việc kiểm tra chẵn lẻđược cho phép.

• Bit 1 – U2X (Double the USART Transmission Speed): bit này chỉ có tác dụng ở chế độ hoạt động không đồng bộ. Ghi bit này thành 0 khi sử dụng chế độ đồng bộ. Bit này khi Set lên 1 sẽ giảm số chia của bộ chia tốc độ Baud từ 16 xuống 8, từ đó nhân

đôi tốc độ truyền cho thông tin không đồng bộ.

• Bit 0 – MPCM (Multi-Processor Communication Mode): bit này cho phép chế độ

giao tiếp nhiều Vi điều khiển.

Thanh ghi trạng thái và điều khiển B – UCSRB

• Bit 7 – RXCIE (RX Complete Interrupt Enable): đặt bit này lên 1 sẽ cho phép ngắt trên cờ RXC. Chỉ tạo được ngắt nhận USART khi bit RXCIEn được thiết lập bằng 1, khi này cờ ngắt toàn cục trong thanh ghi SREG và bit RXC trong thanh ghi UCSRA

đều được đặt bằng 1.

• Bit 6 – TXCIE (TX Complete Interrupt Enable): đặt bit này lên 1 sẽ cho phép ngắt trên cờ TXC. Ngắt truyền USART chỉđược tạo ra khi bit TXCIE được thiết lập bằng 1, khi này cờ ngắt toàn cục trong thanh ghi SREG và bit TXC trong thanh ghi UCSRA đều được đặt bằng 1.

• Bit 5 – UDRIE (USART Data Register Empty Interrupt Enable): đặt bit này lên 1 sẽ cho phép ngắt trên cờ UDRE. Ngắt thanh ghi dữ liệu trống chỉ được tạo ra khi bit UDRIE

Trang 59

được thiết lập bằng 1, khi này cờ ngắt toàn cục trong thanh ghi SREG và bit UDRE trong thanh ghi UCSRA đều được đặt bằng 1.

• Bit 4 – RXEN (Receiver Enable): thiết lập bit này bằng 1 sẽ cho phép bộ thu USARTn. Khi này bộ thu không quan tâm đến hoạt động bình thường của cổng ứng với chân RxD. Khi không cho phép, bộ thu sẽ lấp đầy bộ đệm nhận làm mất hiệu lực của các cờ Fen, DOR và UPE.

• Bit 3 – TXEN (Transmitter Enable): thiết lập bit này lên 1 cho phép bộ phát USART. Khi đó bộ thu không quan tâm đến hoạt động bình thường của cổng ứng với chân TxD. Ngược lại khi đặt là 0 sẽ không cho phép bộ phát USART.

• Bit 2 – UCSZ2 (Character Size): bit UCSZ2 kết hợp với bit UCSZ1, UCSZ0 trong UCSRC để thiết lập số lượng bit dữ liệu (kích thước ký tự) trong khung dữ liệu thu và phát.

• Bit 1 – RXB8 (Receiver Data Bit 8): là bit dữ liệu thứ 9 của ký tự nhận khi hoạt động

Một phần của tài liệu điều khiển từ xa các thiết bị bằng tin nhắn sms (Trang 48)

Tải bản đầy đủ (PDF)

(107 trang)