.Khung ngoại vi
Tất cả các thanh ghi ngoại vi được nhóm lại thành khung ngoại vi:
PF0 ; PF1 và PF2 .Khung ngoại vi PF0 bao gồm các thanh ghi thiết lập điều khiển tốc độ nội bộ của bộ nhớ Flash,cũng như thời gian truy cập đến SARAM.Khung ngoại vi PF1 bao gồm hầu hết thanh ghi điều khiển ngoại vi.Khung ngoại vi PF2 dành riêng cho điều khiển mạng khu vực (CAN)
.Digital I/O unit
Slide tiếp theo giải thích các thủ tục khởi tạo.Tất cả 6 cổng GPIO được điều khiển bởi GPxMUX (trong đó x là A,B,D,E,F,G).Xoá một bit về 0 sẽ chọn chức năng cổng vào/ra, đưa bit lên 1 sẽ chọn nó với chức năng đặc biệt (chức năng riêng của cổng đó).
Khi đã chọn chức năng vào/ra,thì nhóm thanh ghi GPxDIR sẽ xác định hướng của cổng vào/ra đó.Xóa một bit xuống 0 xác định đó là hướng vào (input).Set một bit lên 1 xác định đó là cổng ra(output)
.Clock Module
Trước khi sử dung GPIO cần phải thiết lập Module Clock.Bộ tạo dao động bên ngoài (tối đa 35MHz) chưa đáp ứng đủ tần số làm việc của EzDSP(150MHz).Sử dụng thanh ghi PLLCR để thiết lập đúng tần số hoạt động,
Tín hiệu “CLKIN” (xung dao động vào chip) cùng tần số với tín hiệu ra “SYSCLKOUT” được sử dụng cho các giao diện bộ nhớ ngoài và truyền thông nội bộ.
.Watchdog Timer
-Reset C28x nếu CPU bị treo
.Bộ đếm Watchdog hoạt động độc lập với CPU
.Nếu bộ đếm bị tràn,thiết lập lại hoặc ngắt được kích hoạt
.CPU phải viết đúng trình tự dữ liệu để thiết lập lại truy cập trước khi tràn -Watchdog phải được vô hiệu hoá trong khoảng 4-5ms sau khi reset (với tần số dao động ngoài là 30MHz)
-Vô hiệu hóa Watchdog sau khi reset :Thiết lập bit 6 lên 1
-Tăng thời gian tràn cho Watchdog : WD Prescaler có thể được sử dụng để tăng thời gian tràn cho Watchdog.Logic Check Bít phải ghi 101 cho ba bit tương ứng nếu không quá trình này sẽ không thực hiện được.
*Thiết lập lại Watchdog :Thanh ghi WDKEY
Vậy làm thế nào để xóa Watch dog? Bằng việc ghi “ Valid key” theo thứ tự vào thanh ghi WDKEY
WDKEY=55h bộ đếm hoạt động bình thường chờ đến khi được ghi thành giá trị AAh thì bộ đếm reset về 0
thực .Hầu hết các tín hiệu vật lý như nhiệt độ , độ ẩm ,áp suất , tốc độ , gia tốc là những tín hiệu tương tự nằm trong dải từ Vmin đến Vmax ví dụ 0 đến 3V.Mục đích của bộ ADC là chuyển đổi tín hiệu tương tự sang tín hiệu số .Mối quan hệ giữa điện áp đầu vào tương tự và đầu ra số được cho bởi :
VREF+ và VREF- là điện áp tham chiếu được sử dụng để giới hạn dải điện áp tương tự .Bất kỳ điện áp đầu vào nào vượt quá điện áp cho phép thì sẽ tạo ra một số digital bão hòa.Trong trường hợp của C28x là 0 đến 3v .Bộ ADC của c28x là 12bit ( n=12 ) do đó
Hầu hết các tín hiệu ứng dụng đòi hỏi không chỉ l tín hiệu tương tự đầu vào để chuyển đổi thành tín hiệu số ,mạch vòng điều khiển thường yêu cầu nhiều hơn một tín hiệu từ các cảm biến khác nhau do đó C28x được trang bị với 16 chân ADC đầu vào chuyên dụng để đo điện áp tương tự .16 chân tín hiệu này được xử lý tuần tự từng kênh hoặc 2 kênh một lúc.Đặc điểm modul ADC của C28x như sau
- Độ phân giải 12 bit
- 16 kênh đầu vào ( 0-3v) .Hai bộ dồn kênh cho phép lấy mẫu hai kênh một lúc
- Chế độ lấy mẫu nối tầng ( cascaded) và Dual Sequencer - 16 thanh ghi lưu trữ kết quả
- Nhiều nguồn kích hoạt chuyển đổi ( kích hoạt bên ngoài ,S/W và bộ quản lý sự kiện )
Bộ ADC của C28x sẽ tự động sắp xếp và lấy mẫu 16 kênh .Có nghĩa là bộ ADC tự động chuyển đổi kênh tiếp theo khi kênh trước đó đã thực hiện xong ,có thể kích hoạt một ngắt khi chuỗi chuyển đổi này được thực hiện xong. Thời gian chuyển đổi nhanh nhất là 80ns cho mỗi mẫu trong trình tự chuyển đổi bắt đầu từ mẫu thứ 2 và 160ns cho mẫu đầu tiên .
Việc khởi động chuỗi chuyển đổi có thể bắt đầu từ các nguồn sau - Bằng phần mềm : Đặt bit start lên 1
- Bằng tín hiệu ngoài : “ADCSOC”
-Bằng sự kiện (chu kỳ,so sánh,tràn dưới ) của modul quản lý sự kiện A và B. .ADC trong chế độ nối tầng ( cascaded)
Các kết quả được đưa vào các thanh ghi (“RESULTO” đến “RESULT15” ) tương ứng với mỗi kênh.Chế độ lấy mẫu có thể được thực hiện đồng thời hay tuần tự .Trong trường hợp lấy mẫu đồng thời cả hai s&hs được sử dụng song song .hai line đầu vào cùng với các kênh tương ứng (ví dụ ADCINA3 và ADCINB3 ) được chuyển đổi cùng một lúc bởi CHSCL00.Trong chế độ tuần tự “sequentinal mode” các line đầu vào có thể kết nối với tầng bất kỳ của khối auto sequencer.Việc kích hoạt một trình tự chuyển đổi có thể sử dụng phần mềm bằng cách thiết lập một bit cụ thể ,hay bằng các sự kiện cụ thể trên phần cứng .Đặc biệt việc kết hợp với bộ định thời làm cho chu kỳ lấy mẫu rất chính xác .Đây là điều kiện rất quan trọng trong điều khiển và xử lý tín hiệu số
.ADC trong chế độ Dual Sequencer
Chế độ hoạt động thứ 2 của của modul ADC là chế độ Dual Sequencer bộ lấy mẫu tự động được tách thành 2 tầng (“SEQ1” và “SEQ2”).Trong chế độ này sử dụng EVA để kích hoạt cho SEQ1 và EVB cho SEQ2. Kết quả chuyển đổi được lưu trữ trong RESULT0 đến RESULT7 cho SEQ1 và
RESULT8 đến RESULT15 cho SEQ2. Trong trường hợp kích hoạt SEQ1 và SEQ2 cùng một lúc thì sự kiện nào có quyền ưu tiên cao hơn sẽ được xử lý trước .Ở đây SEQ1 có quyền ưu tiên cao hơn , việc bắt đầu SEQ2 sẽ được thực hiện sau SEQ1
.Thời gian chuyển đổi ADC
Thiết lập nguồn xung 25MHz cho Modul ADC
Có một số hạn chế đối với các thiết lập về thời gian chuyển đổi ADC.Trước tiên các nguồn xung clock cơ bản của ADC là bắt đầu từ HSPCLK mà
các bit “ADCCLKPS” cho phù hợp .Bit “CPS”để lựa chọn một bộ chia 2. Xung clock “ADCCL1 “ là thời gian cơ sở cho các bộ phận xử lý bên trong khối ADC.Một hạn chế thứ ba là cửa sổ lấy mẫu được điều khiển bằng các “ACQ_PS”.Nhóm các bit xác định chiều dài cửa sổ được sử dụng giữa các switch dồn kênh và thời gian lấy mẫu điện áp đầu vào .Thời gian này phụ thuộc vào trở kháng của của tín hiệu vào vì vậy nó phụ thuộc vào phần cứng người lập trình không thể chỉ định một khoảng thời gian lấy mẫu tối ưu cho tất cả các ứng dụng.
.Các thanh ghi điều khiển modul ADC
Ba thanh ghi điều khiển “ADCCTL1 đến 3 “ được sử dụng để thiết lập một trong những điều kiện hoạt động của ADC .Thanh ghi “ADCST” thể hiện trạng thái của ADC
Các thanh ghi Modul ADC *Thanh ghi ADC Control Register 1:
Bit 14 “ RESET” có thể sử dụng để reset toàn bộ các bộ phận trong modul ADC trở về trạng thái thiết lập .Điều này rất tốt trong thực tế để reset lệnh trươc khi thiết lập ADC.Bit 12 và 13 định nghĩa sự tác động qua lại ADC và lệnh emulator ,4 bit tiếp theo định nghĩa độ dài cửa sổ lấy mẫu
Bit 6 (“CONT_RUN”) định nghĩa quá trình tự động sắp xếp dãy chuyển từ khi bắt đầu đến khi kết thúc một cách tuần tự ( =0 ) và đợi cho đến khi kích hoạt nếu dãy được bắt đầu lại ( = 1)
Bit 5 (“SEQ1_OVRD”) Định nghĩa hai tùy chọn khác nhau cho chế độ chạy liên tục .
Bit 4 (‘SEQ_CASC’) Chọn chế độ :Dual mode hoặc Cascaded
4 bit sau cùng định nghĩa chế độ bộ sắp xếp dãy để 1 tầng (16line) (=1) hay 2 tầng ( 8line cho mỗi tầng ) (=0).
* Thanh ghi ADC Control Register 2 -Byte cao thanh ghi ADC Control 2
Nửa trên của thanh ghi ADCTRL2 có tác dụng điều khiển các chế độ hoạt động của dãy 1.Bit 15 “EVB_SOC_SEQ” (bít cờ chỉ đọc ) nếu bộ quản lý sự
kiện B kích hoạt chuyển đổi .Bit 14 “RST_SEQ1” được sử dụng để reset state machine của SEQ1về trạng thái ban đầu .Đây là cách để kích hoạt tiếp theo được bắt đầu lại từ CHSELSEQ1.Đặt bit 13 “SOC_SEQ1” lên 1 để kích hoạt chuyển đổi bằng phần mềm .Bit 11 và bit 10 định nghĩa các chế độ ngắt của SEQ1 ,có thể yêu cầu ngắt sau mỗi chuyển đổi hay các chuỗi khác nhau.Bit 8 “EVA_SOC_SEQ1” là bit đánh dấu cho phép hay không cho phép bộ quản lý sự kiện A kích hoạt chuyển đổi .
-Byte thấp thanh ghi ADC Control 2
Byte thấp của ADCTRL2 để điều khiển dãy SEQ2 .Bit 7 là cờ chỉ ra sự kiện trên chân “ADCSOC” là nguyên nhân gây ra chuyển đổi ,các bit còn lại giống với nửa trên
* Thanh ghi ADC Control Register 3
*Thanh ghi điều khiển lựa chọn kênh đầu vào ADC
3.4.Ngắt trong F2812
Giới thiệu
Có 16 đường ngắt:
-Trong đó 2 đường ngắt ko che được (Non-Maskable) là RESET và NMI -14 đường ngắt che được.Người lập trình có thể cho phép hoặc không cho phép ngắt
Ở ngắt che được thì có 2 trạng thái “0” và “1” .”1” có nghĩa là cho phép ngắt và “0” là không cho phép ngắt .
Bằng cách đánh dấu vào thanh ghi “IER” người lập trình có thể yêu cầu một ngắt .Tất cả 16 đường ngắt được kết nối với bảng véc tơ ngắt ,bao gồm 32 bit bộ nhớ trên một ngắt .Trách nhiệm của người lập trình là điền vào bảng này địa chỉ bắt đầu của chương trình con phục vụ ngắt.
*RESET
Một sườn xuống của tín hiệu trên chân “RS” sẽ reset DSP .DSP bắt đầu lại từ địa chỉ reset (địachỉ 0x3FFFC0 bộ nhớ chương trình )
Tín hiệu reset có thể bắt nguồn từ bộ watchdog hoặc từ chân RS phía ngoài.
Reset không chỉ đưa DSP về địa chỉ 0x3FFFC0 nó còn xóa tất cả các thanh ghi ,reset cờ CPU về trạng thái ban đầu và không cho phép 16 ngắt.
Reset Bootloader (Bộ nạp khởi động Reset)
Khi ROM nội được chọn,Bộ nạp khởi động phần mềm được bắt đầu.Chức năng này xác định các bước tiếp theo,trong khi chờ trạng thái của 4 chân GPIO.Trên eZdsp tacó 5 Jumper để thiết lập điều kiện bắt đầu (JP1,JP7,JP8,JP11,JP12)
Nguồn ngắt
Sử dụng một dòng INT cho nghiều nguồn.Mỗi dòng ngắt được kết nối với vector ngắt của nó. 32-bit bộ nhớ không gian bên trong bảng vector ngắt
Không gian bộ nhớ này giữ địa chỉ cho các ctrình ngắt.Trong trường hợp nhiều ngắt phải được sử dụng cho tất cả các yêu cầu ngắt đến. Kỹ thuật này buộc các lập trình để sử dụng một phương pháp dựa trên phần mềm tách nhập của ngắt. Phương pháp này sẽ mất thêm thời gian ảnh hưởng đến các ứng dụng thời gian thực.
Sử dụng PIE (mở rộng ngắt ngoại vi) giúp mở rộng địa chỉ bảng vector ngắt Khi sử dụng PIE phải thay đổi vị trí bảng vector ngắt đến địa chỉ 0x00D00 Quá trình ngắt che được
Thanh ghi cờ ngắt (IFR)
Thanh ghi cho phép ngắt toàn cục (INTM)
Có tất cả 96 nguồn ngắt,có thể nhóm thành 12 đường PIE ( mỗi đường có 8 nguồn) thể hiện như hình vẽ dưới đây.
Để enable ,disable từng nguồn ngắt riêng lẻ cần phải lập trình cho nhóm thanh ghi “PIEIFRx” và “PIEIRx”.
Thanh ghi PIE
Vị trí tại bảng véc tơ ngắt lúc thiết lập lại là
Bản đồ vector ngắt sau khi thiết lập
Như đã thấy trên hình ,vùng địa chỉ 0x000D40 đến 0x000DFF được sử dụng như là một vùng mở rộng .Bây giờ có 32 bit cho mỗi véc tơ ngắt PIEINT1.1 đến PIEI12.8.
Nguồn xung clock cho bộ timer là nguồn xung clock bên trong
“SYSCLKOUT” .Nó là 150MHZ nếu sử dụng tần số dao động bên ngoài là 30MHZ và sử dụng hệ số nhân PLL là 10/2 .Khi một timer được cho phép (TCR-Bit4) xung clock đi vào bộ đếm xuống 16 bít (prescaler PSCH:PSC) .Khi tràn dưới nó tạo ra một tín hiệu cho bộ đếm 32 bít (TIMH:TIM) .Một ngắt có thể được yêu cầu khi timer đếm tràn.
Thanh ghi chia 16 bít (divide down register) “THDDRH:TDDR được sử dụng để nạp lại cho thanh ghi prescaler.Mỗi lần prescaler đếm tràn dưới giá trị từ thanh ghi divide down được nạp vào prescaler.Tương tự như vậy
thanh ghi 32bit period PRDH:PRD được sử dụng để nạp lại cho bộ đếm32bít Timer 1 và timer 2 thì thường xuyên dược sử dụng bởi Texas Intruments cho hệ điều hành thời gian thực “DSP BIOS” trong khi timer 0 chỉ sử dụng cho mục đích chung .Điều này không chỉ giữ cho timer 1 và timer 2 sử dụng cùng với “DSP/BIOS” mà còn giúp chúng ta hiểu hơn về bộ PIE bởi vì timer 0 là bộ đếm thời gian duy nhất của CPU mà đi qua PIE.
CHƯƠNG 4: Xây dựng modul DAC,chuyển đổi tốc độ động cơ thành giá trị điện áp từ 0-5V.Giao diện người dùng,cho phép nhập thông số động cơ bất kỳ và hiển thị LCD.
4.1.Chức năng và sơ đồ khối
4.1.1.chức năng: chuyển đổi tốc độ động cơ thành giá trị điện áp từ 0-
5V.Cho phép cài đặt thông số động cơ(tốc độ quay,encoder,thời gian lấy mẫu).Hiển thị giá trị điện áp ra,số xung encoder trong thời gian lấy mẫu.
4.1.2.sơ đồ khối:
• ADC1:sử dụng encoder chuyển đổi tốc độ động cơ thành tín hiệu xung đưa về vi điều khiển
• ADC2:sử dụng bộ ADC của VĐK đo điện áp ra của bộ DAC đưa về hiển thị
• DAC:chuyển đổi tín hiệu logic 8 bit của VĐK thành tín hiệu analog tương ứng
• Hiển thị:lcd 16x2
4.2.Giải pháp thược hiện 4.2.1.Vi điều khiển:atmega 8
• Có 8Kbyte bộ nhớ flash
• Có thể xóa lập trình được và có thể chịu được 10000 lần ghi xóa.
• Có 32 thanh ghi đa năng 8 bit,
• Atmega8 có 28 chân, trong đó có 23 cổng vào ra.
• Nguồn nuôi từ 2.7 đến 5.5 đối với Atmega8L và từ 4.5 đến 5.5 đối với Atmega8,
• Làm việc tiêu thụ dòng 3.6mA.
• Sử dụng mạch dao động ngoài từ 0 đến 8 Mhz với Atmega8L và từ 0 đến 16 Mhz với Atmega8.
• Ngoài ra chíp Atmega8 còn có bộ xung nội bên trong có thể lập trình chế độ xung nhịp
• Vi điều khiển AVR do hãng Atmel ( Hoa Kì ) sản xuất được gới thiệu lần đầu năm1996. AVR có rất nhiều dòng khác nhau bao gồm dòng Tiny AVR ( như AT tiny 13, ATtiny 22…) có kích thước bộ nhớ nhỏ, ít bộ phận ngoại vi, rồi đến dòng AVR ( chẳn hạnAT90S8535,
AT90S8515,…) có kích thước bộ nhớ vào loại trung bình và mạnh hơn là dòng Mega ( như ATmega32, ATmega128,…) với bộ nhớ có kích thước vài Kbyte đến vài trăm Kb cùng với các bộ ngoại vi đa dạng được tích hợp trên chip, cũng có dòng tích hợp cả bộ LCD trên chip ( dòng LCD AVR ). Tốc độ của dòng Mega cũng cao hơn so với các dòng khác. Sự khác nhau cơ bản giữa các dòng chình là cấu trúc ngoại vi, còn nhân thì vẫn như nhau
• Bộ Nhớ Dữ Liệu : Bộ nhớ dữ liệu của AVR chia làm 2 phần chính là
bộ nhớSRAM và bộ nhớ EEPROM. Tuy cùng là bộ nhớ dữ liệu nhưng hai bộ nhớ này lại tách biệt nhau và được đánh địa chỉ riêng.
• Bộ nhớ SRAM có dụng lượng 1 K bytes, Bộ nhớ SRAM có hai chế
độ hoạt độnglà chế độ thông thường và chế độ tương thích với
ATmega103, muốn thiết lập bộ nhớ SRAM hoạt động theo chế độ nào ta sử dụng bit cầu chì M103C ( M103C fuse bit ).
• Atmega8 là vi điều khiển 8 bit dựa trên kiến trúc RISC. Với khả năng thực hiện mỗi lệnh trong vòng một chu kỳ xung clock, Atmega8 có thể đạt được tốc độ 1MIPS trên mỗi MHz (1 triệu lệnh/s/MHz).
• Dưới đây là sơ đồ khối của Atmega8
Sơ đồ cấu trúc Atmega8
• ATmega 8 hỗ trợ đầy đủ các chương trình và công cụ phát triển hệ thống như: trình dịch C, macro assemblers, chương trình mô phỏng/sửa lỗi, kit thử nghiêm.
4.2.1.1.Hệ thống xung CLOCK
Để cấu hình cho chip hoạt động theo chế độ xung clock nào, người ta dùng các bit cầu chì ( fuse bit ) CKSEL 3, CKSEL2, CKSEL 1. Ngoài ra khi vi điều khiển được đánh thức từ các chế độ nghỉ sang chế độ hoạt động bình