Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 55 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
55
Dung lượng
1,32 MB
Nội dung
Lab1: Hardware and Software Set Up I Mục tiêu: II Download cài đặt phần mềm Code Composer Studio, download nhiều tài liệu phần mềm hỗ trợ để sử dụng toàn lab Tìm hiểu thành phần kit kiểm tra hoạt động chương trình demo nạp sẵn kit Các công cụ phát triển sử dụng xuyên suốt lab sau Các bước tiến hành: Harware Yêu cầu phần cứng: Laptop 32 64 bit Window XP Window với tối thiểu 2G nhớ ổ cứng trống Có kết nối mạng Nếu thực lab dùng hình hiển thị giúp trình dễ dàng Do đó, khuyến khích bạn mang theo labtop cá nhân gi thực hành Thực lab kit EK-LM4F120XL Một multi – meter Download cài đặt Code Composer Studio Download phần mềm Code Composer Studio (CCS) 5.x web installer từ địa http://processors.wiki.ti.com/index.php/Download_CCS (khơng download dùng thử nào) u cầu kết nối mạng q trình hồn tất Nếu khơng có kết nối mạng sử dụng offline version để cài đặt Nếu sử dụng file offline, chạy file ccs_setup_5.xxxxx.exe folder sau giải nén Đồng ý Software License Agreement click Next Ngoại trừ việc muốn cài đặt CCS vị trí khác, tốt nên chọn folder mặc định theo chương trình cài đặt Click Next Chọn “Custom” cho phần Setup type Click Next Trong hộp thoại tiếp theo, chọn processors mà CCS hỗ trợ Chọn “Stellaris Cortex M MCUs” để thực lab Ngoài ra, quan tâm tới MSP430 chọn “MSP430 Low Power MCUs” Có thể chọn thêm kiến trúc khác, nhiên th i gian cài đặt kích thước cài đặt lớn Click Next Trong hộp thoại Component, giữ mặc định lựa chọn Click Next Trong hộp thoại Emulator, bỏ chọn Blackhawk and Spectrum Digital emulators, trừ có ý định sử dụng chúng 10 Khi tới đến hộp thoại cài đặt cuối cùng, Click Next Quá trình cài đặt bắt đầu Khi hồn tất q trình cài đặt, khơng chạy CCS Cài đặt StellarisWare 11 Download cài đặt version cuối StellarisWare từ địa chỉ: http://www.ti.com/tool/sw-lm3s Nếu có thể, nên cài đặt StellarisWare vào folder mặc định C:\StellarisWare Cài đặt LM Flash Programmer 12 Download, giải nén, cài đặt LM Flash Programmer (LMFLASHPROGRAMMER) từ http://www.ti.com/tool/lmflashprogrammer Download ICDI Drivers 13 Download phiên in-circuit debug interface drivers từ địa http://www.ti.com/tool/stellaris_icdi_drivers Giải nén file di chuyển folder stellaris_icdi_drivers vào địa C:\StellarisWare Download cài đặt Workshop Lab Files 14 Download the lab installation file từ địa Wiki site bên Các file lab cài đặt C:\StellarisWare\boards\MyLaunchPadBoard Do đó, phải chắn StellarisWare phải cài đặt trước www.ti.com/StellarisLaunchPadWorkshop Download Workshop Workbook Lab Files 15 Có thể download file Tiếng Anh hướng dẫn lab với nhiều lab theo địa sau: www.ti.com/StellarisLaunchPadWorkshop Terminal Program 16 Nếu sử dụng Window XP, sử dụng HyperTerminal Window khơng có chương trình terminal, nên phải sử dụng phần mềm khác Các câu lệnh labs sử dụng HyperTerminal PuTTY Có thể download PuTTY từ địa sau: http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe Window-side USB Examples 17 Download cài đặt StellarisWare Windows-side USB examples từ địa chỉ: www.ti.com/sw-usb-win Download cài đặt GIMP 18 Chúng ta cần cơng cụ thao tác đồ họa có khả xử lí ảnh định dạng PNM GIMP làm điều Download cài đặt GIMP từ địa chỉ: www.gimp.org LaunchPad Board Schematic 19 Để tham khảo, schematic có phần cuối tài liệu Các tài liệu trang web tham khảo hữu dụng 20 Có nhiều tài liệu hữu dụng, nhiên bạn nên có tài liệu sau Tìm C:\StellarisWare\docs thấy: Peripheral Driver User’s Guide (SW-DRL-UGxxxx.pdf) USB Library User’s Guide (SW-USBL-UGxxxx.pdf) Graphics Library User’s Guide (SW-GRL-UGxxxx.pdf) LaunchPad Board User’s Guide (SW-EK-LM4F120XL-UG-xxxx.pdf ) http://www.ti.com/product/lm4f120h5qr download 21 Vào địa chỉ: LM4F120H5QR Data Sheet Stellaris Data Sheet thực hướng dẫn sử dụng đầy đủ cho device 22 Download the ARM Optimizing C/C++ Compilers User Guide từ địa http://www.ti.com/lit/pdf/spnu151 (SPNU151) 23 Các gợi ý trình bày cuối labs (nếu có) để cung cấp thông tin hữu dụng gặp phải vấn đề labs 24 Tìm kiếm TI website cho tài liệu tham khảo thêm: SPMU287: Stellaris Driver Installation Guide (for ICDI and FTDI drivers) SPMU288: BoosterPack Development Guide SPMU289: LaunchPad Evaluation Board User’s Manual (includes schematic) Có thể tìm thêm thơng tin websites sau: Main page: www.ti.com/launchpad Stellaris LP: www.ti.com/stellaris-launchpad EK-LM4F120XL product page: http://www.ti.com/tool/EK-LM4F120XL BoosterPack webpage: www.ti.com/boosterpack LaunchPad WiKi: www.ti.com/launchpadwiki LM4F120H5QR folder: http://www.ti.com/product/lm4f120h5qr Kit 25 M hộp kit Sẽ có đó: The LM4F120H5QR LaunchPad Board USB cable (A-male to micro-B-male) README First card Cài đặt Board ban đầu 26 Kết nối board với máy tính cài đặt drivers LM4F120 LaunchPad Board ICDI USB port (có ghi nhãn board DEBUG thấy hình dưới) cổng USB bao gồm kết nối: Stellaris ICDI JTAG/SWD Interface Stellaris ICDI DFU Device Stellaris Virtual Serial Port - debugger connection - firmware update connection - a serial data connection Drivers cài đặt tự động QuickStart Application LaunchPad Board lập trình trước với ứng dụng QuickStart Chỉ cần cung cấp nguồn cho board, ứng dụng chạy cách tự động 27 Phải chắn Power switch phía góc trái board gạt qua vị trí bên phải DEBUG hình: 28 Phần mềm LM4F120H5QR sử dụng timers pulse-width modulators (PWMs) để thay đổi cư ng độ tất màu Led đơn RGB (red, green, and blue) B i vậy, mắt cảm nhận nhiều màu sắc khác tạo thông qua việc kết hợp màu Hai plushbuttons phía board đánh nhãn SW1 (bên trái) SW2 ( bên phải ) Nhấn nhấn giữ SW1 để di chuyển phía phổ màu đỏ cuối Nhấn nhấn giữ SW2 để di chuyển phổ màu tím cuối Nếu khơng nhấn nút vòng giây, phần mềm tự động quay thay đổi màu sắc mặc định 29 Nhấn giữ nút nhấn SW1 SW2 vòng giây vào hibernate mode (chế độ ngủ) Trong chế độ màu sắc cuối nhấp nháy 1/2 giây sau giây Giữa khoảng nhấp nháy, thiết bị chế độ ngủ VDD3ON với realtime-clock (RTC) chạy Nhấn SW2 lúc đánh thức thiết bị quay chương trình hiển thị màu sắc cách tự động 30 Ta giao tiếp với board thơng qua UART UART kết nối cổng nối tiếp ảo thông qua kết nối USB giả lập Các bước sau hướng dẫn làm cách m kết nối với board sử dụng HyperTerminal (trong Window XP) PuTTY (trong Window 8) 31 Ta cần tìm COM port number Stellaris virtual Serial Port Device Manager Bỏ qua bước 32 đạng sử dụng Window Window XP: A Click chuột phải My Computer chọn Properties B Trong cửa sổ System Properties, chọn tab Hardware C Click nút Device Manager M Ports heading viết số Stellaris Virtual Serial Port đây: COM 32 Window 8: A Click chuột phải My Computer chọn Properties B Chọn Device Manager hộp thoại bên trái M Ports heading viết số Stellaris Virtual Serial Port đây: COM 33 Trong Win XP, m HyperTerminal Trong hộp thoại ra, chọn kết nối sử dụng COM##, với ## số cổng COM ghi bước trước Click OK Chọn thiết lập hình sau click OK Khi cửa sổ terminal m , nhấn ENTER lần LaunchPad board phản hồi xác nhận giao tiếp m Bỏ qua bước 31 Header Files Xóa nội dung file main.c, thêm d ng vào file main.c Nó bao gồm file header để truy cập vào hàm API StellarisWare #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/debug.h" #include "driverlib/sysctl.h" #include "driverlib/adc.h" adc.h: định nghĩa cho việc sử dụng ADC driver Driver Library Error Routine Th i gian chạy kiểm tra thông số thiết bị ngoại vi Driver Library mau kể từ kiểm tra mức có ảnh hư ng tiêu cực đến tính chu kỳ Nhưng, q trình Debug, bạn thấy bạn gọi driver library API với thơng số khơng xác thư viện chức tạo lỗi lý khác Các mã sau gọi driver library gặp lỗi Để code chạy ta cần thêm vào đoạn code sau #ifdef DEBUG void error (char *pcFilename, unsigned long ulLine) } { #endif Main() Thiết lập hàm main() với d ng sau: int main(void) { } Định nghĩa sau tạo mảng sử dụng để lưu trữ liệu đọc từ ADC FIFO Nó phải lớn FIFO cho chuỗi sử dụng Chúng ta sử dụng có độ sâu FIFO Nếu sequencer khác sử dụng với FIFO nhỏ sâu hơn, sau kích thước mảng phải thay đổi Ví dụ, sequencer có độ sâu Thêm d ng khai báo sau vào đầu hàm main(): unsigned long ulADC0Value[4]; Chúng ta cần số biến tính nhiệt độ từ liệu cảm biến Biến để lưu trữ trung bình nhiệt độ Các biến cịn lại sử dụng để lưu trữ giá trị nhiệt độ C độ F Tất khai báo 'volatile’ để biến không tối ưu hóa b i trình biên dịch có sẵn cho 'Expression' 'Local' window(s) th i gian chạy Thêm vào d ng sau vào cuối : volatile unsigned long ulTempAvg; volatile unsigned long ulTempValueC; volatile unsigned long ulTempValueF; Set up clock hệ thống 40Mhz cách thêm vào chương trình d ng lệnh sau: SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAI N|SYSCTL_XTAL_16MHZ); Kích hoạt module ADC0 cách thêm d ng lệnh sau vào d ng kế tiếp: SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); Trong ví dụ này, thiết lập tốc độ lấy mẫu 250kilo-samples giây Hàm API SysCtlADCSpeedSet() set tốc độ lấy mẫy với tốc độ cụ thể (125KSPS, 500KSPS and 1MSPS) Add thêm vào d ng d ng lệnh sau: SysCtlADCSpeedSet(SYSCTL_ADCSPEED_250KSPS); 10 Trước cấu hình thiết lập ADC sequencer Ta cần phải disable ADC sequencer Add thêm vào d ng d ng lệnh sau: ADCSequenceDisable(ADC0_BASE, 1); 11 Bây gi cấu hình ADC sequencer Chúng ta muốn sử dụng ADC0, mẫu sequencer 1, muốn vi xử lý để kích hoạt sequencer muốn sử dụng ưu tiên cao Add thêm vào d ng d ng lệnh sau: ADCSequenceConfigure(ADC0_BASE, 1, ADC_TRIGGER_PROCESSOR, 0); 12 Tiếp theo cần phải cấu hình tất bốn steps sequencer ADC Cấu hình steps 0-2 sequencer để lấy mẫu cảm biến nhiệt độ (ADC_CTL_TS) Trong ví dụ này, đạt trung bình tất bốn mẫu liệu cảm biến nhiệt độ sequencer để tính tốn nhiệt độ, tất bốn steps sequencer đo cảm biến nhiệt độ Để biết thêm thông tin xếp dãy ADC steps, tham khảo datasheet thiết bị cụ thể Add thêm d ng sau vào d ng d ng lệnh: ADCSequenceStepConfigure(ADC0_BASE, 1, 0, ADC_CTL_TS); ADCSequenceStepConfigure(ADC0_BASE, 1, 1, ADC_CTL_TS); ADCSequenceStepConfigure(ADC0_BASE, 1, 2, ADC_CTL_TS); 13 steps sequencer cuối đ i hỏi vài thiết lập bổ sung Mẫu cảm biến nhiệt độ (ADC_CTL_TS) cấu hình c ngắt (ADC_CTL_IE) thiết lập mẫu thực Cho logic ADC việc chuyển đổi cuối sequencer (ADC_CTL_END) Add thêm vào d ng d ng lệnh sau: ADCSequenceStepConfigure(ADC0_BASE, 1, 3, ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END); 14 Bây gi enable ADC sequencer Add thêm vào d ng d ng lệnh sau: ADCSequenceEnable(ADC0_BASE, 1); 15 Vẫn hàm main(), thêm v ng lặp while (1) Add thêm d ng code sau vào d ng kế tiếp: while(1) { } 16 Save lại code bạn Ta đoạn code #include "inc/hw_memmap.h" #include "driverlib/debug.h" #include "driverlib/adc.h" #ifdef DEBUG { #endif int main(void) #include "inc/hw_types.h" #include "driverlib/sysctl.h" void error (char *pcFilename, unsigned long ulLine) } { unsigned long ulADC0Value[4]; volatile unsigned long ulTempValueC; volatile unsigned long ulTempAvg; volatile unsigned long ulTempValueF; SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN| SYSCTL_XTAL_16MHZ); SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); SysCtlADCSpeedSet(SYSCTL_ADCSPEED_250KSPS); ADCSequenceDisable(ADC0_BASE, 1); ADCSequenceConfigure(ADC0_BASE, 1, ADC_TRIGGER_PROCESSOR, 0); ADCSequenceStepConfigure(ADC0_BASE, 1, 1, ADC_CTL_TS); ADCSequenceStepConfigure(ADC0_BASE, 1, 0, ADC_CTL_TS); ADCSequenceStepConfigure(ADC0_BASE, 1, 2, ADC_CTL_TS); ADCSequenceStepConfigure(ADC0_BASE, 1, 3, ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END); ADCSequenceEnable(ADC0_BASE, 1); while(1) { } } Khi bạn xây dựng code này, bạn nhận cảnh báo “ulADC0Value was declared but never referenced” Bỏ qua cảnh báo này, thêm code để sử dụng mảng sau Inside the while(1) Loop Trong while (1) đọc giá trị cảm biến nhiệt độ tính tốn nhiệt độ 17 Các dấu hiệu cho thấy việc chuyển đổi ADC hoàn tất c tình trạng gián đoạn ADC Nó ln ln thực hành lập trình tốt để đảm bảo c xóa trước viết mã xử lý Thêm đoạn code sau vào d ng v ng lặp while(1): ADCIntClear(ADC0_BASE, 1); 18 Sau kích hoạt chuyển đổi ADC phần mềm Chuyển đổi ADC kích hoạt b i nhiều nguồn khác Thêm d ng code sau sau vào d ng v ng lặp while(1): ADCProcessorTrigger(ADC0_BASE, 1); 19 Sau đó, cần phải ch đợi cho việc chuyển đổi để hoàn thành Rõ ràng, cách tốt để làm điều sử dụng interrupt, lệnh ch đợi trình chuyển đổi kết thúc Thêm d ng code sau sau vào d ng v ng lặp while(1): while(!ADCIntStatus(ADC0_BASE, 1, false)) { } 20 Sau đợi cho trình chuyển đổi hồn thành, bây gi ta đọc giá trị ADC từ ADC Sample Sequencer FIFO Hàm có chức lưu mẫu liệu chuyển đổi ADC chứa ADC Sample Sequencer FIFO vào đệm nhớ Điều trả lại liệu sẵn có ADC Sample Sequencer FIFO, trả lại khơng đầy đủ liệu bạn cố gắng truy cập FIFO q trình chuyển đổi chưa hồn tất Thêm d ng code sau sau vào d ng v ng lặp while(1): ADCSequenceDataGet(ADC0_BASE, 1, ulADC0Value); 21 Tiếp theo ta tiến hành tính tốn giá trị trung bình liệu Chúng ta nói hoạt động phép tốn floating point sau, bây gi phép tốn fixedpoint Việc bổ xung thêm để làm tr n Từ phép toán 2/4 1/2 0.5, 1.5 làm tr n lên việc bổ xung thêm 0.5, c n trư ng hợp 1.0 thêm vào 0.5 thành 1.5, điều làm tr n xuống 1.0 quy tắc làm tr n phép toán nguyên Thêm d ng code sau sau vào d ng v ng lặp while(1): ulTempAvg = (ulADC0Value[0] + ulADC0Value[1] + ulADC0Value[2] + ulADC0Value[3] + 2)/4; 22 Bây gi có giá trị trung bình cảm biến nhiệt độ, tiến hành tính tốn giá trị nhiệt độ theo oC công thức đề cập phần 13.3.6 datasheet LM4F120H5QR Phép chia thực cuối để tránh việc làm tr n q trình tính tốn TEMP = 147.5 – ((75 * (VREFP – VREFN) * ADCVALUE) / 4096) Chúng ta cần phải nhân tất cho 10 bên trong, sau chia cho 10 cuối để kết đúng, VREFP – VREFN VDD 3.3v nhân cho 10 sau nhân tiếp cho 75 để 2475 Thêm d ng code sau sau vào d ng v ng lặp while(1): ulTempValueC = (1475 - ((2475 * ulTempAvg)) / 4096)/10; 23 Sau có oC việc tính tốn oF dễ dàng Phép chia thực sau để tránh làm tr n q trình tính tốn Chúng ta dùng công thức sau để chuyển đổi từ oC sang oF: F +32 điều chỉnh lại chút ta có: F ((C * 9) + 160) / ( C * 9)/5 Thêm d ng code sau sau vào d ng v ng lặp while(1): ulTempValueF = ((ulTempValueC * 9) + 160) / 5; 24 Save code bạn lại, ta đoạn code sau: #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/debug.h" #include "driverlib/sysctl.h" #include "driverlib/adc.h" #ifdef DEBUG void error (char *pcFilename, unsigned long ulLine) { } #endif int main(void) { unsigned long ulADC0Value[4]; volatile unsigned long ulTempAvg; volatile unsigned long ulTempValueC; volatile unsigned long ulTempValueF; SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN| SYSCTL_XTAL_16MHZ); SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); SysCtlADCSpeedSet(SYSCTL_ADCSPEED_250KSPS); ADCSequenceDisable(ADC0_BASE, 1); ADCSequenceConfigure(ADC0_BASE, 1, ADC_TRIGGER_PROCESSOR, 0); ADCSequenceStepConfigure(ADC0_BASE, 1, 0, ADC_CTL_TS); ADCSequenceStepConfigure(ADC0_BASE, 1, 1, ADC_CTL_TS); ADCSequenceStepConfigure(ADC0_BASE, 1, 2, ADC_CTL_TS); ADCSequenceStepConfigure(ADC0_BASE, 1, 3, ADC_CTL_TS | ADC_CTL_IE | ADC_CTL_END); ADCSequenceEnable(ADC0_BASE, 1); while(1) { ADCIntClear(ADC0_BASE, 1); ADCProcessorTrigger(ADC0_BASE, 1); while(!ADCIntStatus(ADC0_BASE, 1, false)) { } ADCSequenceDataGet(ADC0_BASE, 1, ulADC0Value); ulTempAvg = (ulADC0Value[0] + ulADC0Value[1] + ulADC0Value[2] + ulADC0Value[3] + 2)/4; ulTempValueC = (1475 - ((2475 * ulTempAvg)) / 4096)/10; ulTempValueF = ((ulTempValueC * 9) + 160) / 5; } } Add Pre-defined Symbol 25 Click chuột phải vào project Lab5 Project Explorer chọn Properties Bạn click theo đư ng dẫn sau Build → ARM Compiler → Advanced Options → Predefined Symbols Trong phần Pre-define NAME add define DEBUG Click Ok Trong lab define xác định Build and Run the Code 26 Bạn tiến hành compile Download ứng dụng bạn cách click vào biểu tượng Debug xuất , sau trinh compile download kết thúc giao diện Debug 27 Click tab Expressions Xóa tất Expressions cách click chuột phải vào khung chọn Remove All Tìm đến biến ulADC0Value, ulTempAvg, ulTempValueC ulTempValueF bốn d ng cuối code click đúp chuột vào biến để chọn biến, click chuột phải vào biến chọn Add Watch Expression sau nhấn Ok Làm cho biến Kết ta có hình sau: 28 Chúng ta muốn thiết lập cho chương trinh Debug để hiển thị kết sau lần chạy Vì khơng có d ng lệnh sau q trình tính tốn, nên ta đặt Breakpoint trước lệnh tính tốn để hiển thị kết tính tốn gần Click chuột vào d ng v ng lặp while (1) ADCIntClear(ADC0_BASE, 1); Click chuột phải vào nó, chọn Breakpoint (Code Composer Studio) → breakpoint để đặt breakpoint hàng Click chuột phải lên biểu tượng breakpoint chọn Breakpoint Properties …tìm d ng chứa Action click vào Remain Halted value Đó cách bình thư ng breakpoint nên hành động, thay đổi thành Update View Trong hộp thoại đây, lưu ý có cửa sổ Expressions cập nhật Bây gi biến cửa sổ Expressions cập nhật code tiếp tục thực Nhấn OK 29 Click nút Resume để chạy chương trình Bạn thấy giá trị biến u1TempAvg thay đổi giao động nhỏ Bạn dùng ngón tay ma sát lên quần sau đặt lên thiết bị LM4F120 board launchpad để làm ấm Dùng ngón tay bạn vào thức uống lạnh, sau chạm vào thiết bị LM4F120 để làm mát Bạn nên nhanh chóng xem kết biến đổi hình Ghi nhớ cảm biến nhiệt độ chưa hiệu chỉnh, giá trị hiển thị khơng xác Khơng lab này, tìm hiểu thay đổi việc đo lư ng Lưu ý số lượng biến ulTempAvg thay đổi Chúng ta giảm số lượng cách sử dụng phần cứng trung bình ADC Hardware averaging 30 Click nút Teminate để quay tr lại trình chỉnh sửa Tìm đến d ng cài đặt ADC bạn hình Tạo d ng sau hàm SysCtlADCSpeedSet() Và add câu lệnh sau vào: ADCHardwareOversampleConfigure(ADC0_BASE, 64); Code bạn giống hình sau: Tham số cuối gọi hàm API ADCHardwareOversampleConfigure() số lượng mẫu lấy trung bình Con số 2, 4, 8, 16, 32 64 Lựa chọn có nghĩa mẫu ADC FIFO kết 64 phép đo trung bình với 31 Buil, download chạy chương trình bạn board launchpad Quan sát biến ulTempAvg cửa sổ Expressions, bạn thấy thay đổi với tốc độ chậm nhiều so với trước Calling APIs from ROM 32 Trước thực thay đổi, xem dung lượng code Click Teminate để kết thúc trình Debug quay tr giao diện chỉnh sửa Trong Project Explorer, m rộng folder Debug project Lab5 Click đúp vào file Lab5.map 33 Code composer giữ danh sách tập tin thay đổi kể từ lần build Khi bạn nhấp vào nút build, CCS compiles assembles tập tin vào tập tin object (Bạn buộc CCS hồn tồn rebuild lại project cách xóa project rebuilding lại tất cả) Sau đó, q trình đa qua, mối liên kết tạo file output (.out) sử dụng đồ nhớ thiết bị theo defined file linker command ( Cmd) Quá trình build tạo file map (.map) Giải thích độ lớn phần chương trình (.text Code) chúng đặt vào chổ đồ nhớ Trong file Lab5.map, tìm đến SECTION ALLOCATION MAP tìm d ng text hình Chiều dài text chúng tơi 690h Viết kích thước bạn vào 34 Hãy nhớ M4F on-board ROM chứa Thư viện Driver thiết bị ngoại vi Thay thêm thư viện gọi đến nhớ flash chúng nó, gọi chúng từ ROM Điều làm giảm kích thước mã chương trình nhớ flash Để làm vậy, cần thêm hỗ trợ cho ROM mã Trong main.c thêm d ng include sau vào đầu code: #include "driverlib/rom.h" 35 Trong properties lab5 bạn, click chuột phải Lab5 Project Explorer chọn Properties Trong Build → ARM Compiler → Advanced Options, click Predefined Symbols Add biểu tượng sau vào đầu sổ TARGET_IS_BLIZZARD_RA1 Blizzard tên sản ph m nội cho loạt LM4F TI Biểu tượng cung cấp cho thư viện truy cập vào API ROM Nhấn OK 36 Tr lại main.c, thêm ROM_ đến đầu gọi hàm DriverLib hình #include "inc/hw_memmap.h" #include "driverlib/debug.h" #include "driverlib/adc.h" #include "inc/hw_types.h" #include "driverlib/sysctl.h" #include "driverlib/rom.h" #ifdef DEBUG void error (char *pcFilename, unsigned long ulLine) } { #endif int main(void) unsigned long ulADC0Value[4]; volatile unsigned long ulTempValueC; { volatile unsigned long ulTempAvg; volatile unsigned long ulTempValueF; ROM_SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_OSC _MAIN|SYSCTL_XTAL_16MHZ); ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0); ROM_ADCHardwareOversampleConfigure(ADC0_BASE, 64); ROM_SysCtlADCSpeedSet(SYSCTL_ADCSPEED_250KSPS); ROM_ADCSequenceDisable(ADC0_BASE, 1); ROM_ADCSequenceConfigure(ADC0_BASE,1, ADC_TRIGGER_PROCESSOR, 0); ROM_ADCSequenceStepConfigure(ADC0_BASE, 1, 0, ADC_CTL_TS); ROM_ADCSequenceStepConfigure(ADC0_BASE, 1, 2, ADC_CTL_TS); ROM_ADCSequenceStepConfigure(ADC0_BASE, 1, 1, ADC_CTL_TS); ROM_ADCSequenceStepConfigure(ADC0_BASE, ADC_CTL_IE | ADC_CTL_END); ROM_ADCSequenceEnable(ADC0_BASE, 1); while(1) ROM_ADCIntClear(ADC0_BASE, 1); { ROM_ADCProcessorTrigger(ADC0_BASE, 1); 1, 3, ADC_CTL_TS | while(!ROM_ADCIntStatus(ADC0_BASE, 1, false)) } ROM_ADCSequenceDataGet(ADC0_BASE, 1, ulADC0Value); { ulTempAvg = (ulADC0Value[0] + ulADC0Value[1] + ulADC0Value[2] + ulADC0Value[3] + 2)/4; ulTempValueC = (1475 - ((2475 * ulTempAvg)) / 4096)/10; } ulTempValueF = ((ulTempValueC * 9) + 160) / 5; } Build, Download and Run Your Code 37 Click nút Debug để buil download code tới flash memory LM4F120H5QR Khi q trình hồn tất, click nút Resume để chạy code bạn Khi bạn chắn tất thứ làm việc cách xác, click nút Terminate để quay tr giao diện chỉnh sửa 38 Kiểm tra SECTION ALLOCATION MAP Lab5.map Kết hiển thị Kích thước cho text Của 3e8h Nó nhỏ so với trước 40% Viết kết bạn _ 39 Phương pháp thể bước sau gọi " direct ROM calls " Nó thực gọi ROM ánh xạ bạn sử dụng thiết bị (như ARM Cortex-M3 TI) có khơng có ROM Kiểm tra phần 32,3 Peripheral Driver Library User’s Guide để biết thêm thơng tin 40 Khi bạn hồn thành, đóng project chương trình Code Composer Studio bạn lại Hoàn thành! ... SysCtlClockSet SysCtlClockGet interrupt.h : define macros API ? ?i? ??u khiển NIVC (interrupt) driverlib include hàm IntEnable IntPrioritySet gpio.h : define macros API ? ?i? ??u khiển GPIO driverlib include... SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3); while(1) { // Turn on the LED GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3, LED);... hàm GPIOPinTypePWM GPIOPinWrite timer.h : define macros API ? ?i? ??u khiển Timer driverlib include hàm TimerConfigure TimerLoadSet Main() Function Chúng ta sử dụng biến Period để tính tốn độ Timer