Hiển thị các bài đăng có nhãn ARM. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn ARM. Hiển thị tất cả bài đăng

Thứ Sáu, 19 tháng 10, 2012

Hướng Dẫn Lập Trình ARM - LPC2378

Nội Dung
+ Giới thiệu về thành phần Board LPC2378.
+ Cài đặt và cấu hình Chương trình Keil uVision3.
+ Cách flash chương trình xuống Board qua JTAG và bằng công cụ Flash Magic.


Giới thiệu Chip LPC2378
+ LPC2378 của NXP là MCU thuộc họ ARM7 - TDMI
+ Tốc độ CPU: 72MHz
+ Rom: 512Kbytes
+ Bộ nhớ: 58Kbytes
- RAM: 32kb
- USB RAM: 8k
- Ethernet RAM: 16k
- RTC RAM: 2k
+ Nguồn: 3.3V





Thiết bị ngoại vi





Chương trình KEIL









Kết nối board với máy tính thông qua ULINK2
+ Bước 1: Kết nối U-LINK với PC thông qua cable USB.
+ Bước 2: Kết nối U-LINK đến cổng JTAG nằm trên board LPC.
+ Bước 3: Cấp nguồn cho board MCB2300 bằng cable USB.







Cấu hình trong chương trình Keil uVision
+ Dùng công cụ phát triển Keil uVision để tạo, biên dịch, download, debug và chạy chương trình trên board MCB2300.
+ Trong Phần menu Flash/Configủa Flash Tool, chọn Tab Debug, ta nhận thấy thông số của thiết bị JTAG và nên chọn Max JTAG, Clock là 200kHz.





+ Và trong Tab Utilities như sau:







Config vùng nhớ ROM
+ Cấu hình vùng nhớ ROM tại IROM1 với vị trí bắt đầu Start có giá trị 0x0 và kích thước Size có giá trị 0x80000.







Config vùng nhớ RAM
+ Cấu hình vùng nhớ RAM tại IRAM1 với vị trí bắt đầu Start có giá trị 0x40000000 và kích thước Size có giá trị 0x8000.





Biên dịch chương trình











Download xuống board









Kết nối thông qua giao tiếp Serial
+ Tiện ích Flash Magic: Kết nối cổng COM của PC với cổng Serial (UART) của board MCB2300 để nạp chương trình qua board với giao diện ISP Flash.
+ Đánh dấu Create HEX File để tạo file Hex cho những tiện ích Flash bên ngoài.









Cấu hình để chạy Flash Magic
+ Thiết lập jumer trên board MCB2300:
- j9 và j10: ON.
- j13: OFF.
+ Chạy "Flash Magic" và thiết lập thông số như sau:









Flash xuống board
+ Thực hiện theo từng bước trong Flash Magic và flash file .Hex xuống board.






(Nguồn: ĐHKHTN TP.HCM)

[Lập trình ARM-LPC2378] Tổ Chức Bộ Nhớ, Thiết Lập Pin, GPIO, Debug



Nội Dung
+ Cách tổ chức bộ nhớ trong LPC2378
+ Cách thiết lập PIN
+ Debug chương trình


Cách tổ chức bộ nhớ trong LPC2378
+ Bộ xử lý ARM có thể quản lý một không gian địa chỉ bộ nhớ 4Gb
+ Bảng sau đây thể hiện sự phân bố địa chỉ của vùng bộ nhớ trong các thiết bị ARM:







Địa chỉ vùng nhớ LPC23xx


Cách thiết lập PIN
Cấu hình PIN - LPC2378
+ Chip LPC2378 có 144 chân. Với sơ đồ chân như sau:





+ Mỗi chân tương ứng có những chức năng, nhiệm vụ khác nhau.
Ví Dụ:





Thanh ghi PINSEL
+ Các thanh ghi PINSEL (PINSEL0 - PINSEL10) đảm nhiệm việc kết nối giữa các PIN và các thiết bị ngoại vi.
+ Các thanh ghi cấu hình này điều khiển thiết lập những chức năng khác nhau, với mỗi 2Bit tương ứng ta có 4 trường hợp như sau:





Ví Dụ:





Địa chỉ thanh ghi PINSEL
+ Mỗi thanh ghi PINSEL có 4Bytes









GPIO
+ Viết tắt của: General Purpose Input Output.
+ Là chân input/output.
+ LPC2378 có 104 chân có chức năng GPIO.
+ Được thiết lập qua 5 Port 32Bit:





+ Việc điều khiển trực tiếp trong thanh ghi GPIO chỉ có hiệu quả khi chức năng GPIO được chọn tại các PICSEL.
Ví Dụ:



+ Muốn chọn Port0.0 và 0.1 là GPIO thì PINSEL0=0x00; (giá trị mặc định của PINSEL).
+ Low GPIO được điều khiển bởi các thanh ghi: IOPIN, IOSET, IODIR, IOCLR. (Chỉ cho Port0 và Port1)
+ Fast GPIO được điều khiển bởi các thanh ghi: FIOPIN, FIOSET, FIODIR, FIOCLR, FIOMASK.








Ví Dụ:
+ Cấu hình Port0.6 là output:
- IODIR0 = 0x00000040; //Bit thứ 6 được bật lên 1: [ 0000 0000 0100 0000 ]
+ Cấu hình Port0.6 ở mức tín hiệu cao:
- IOSET0 = 0x00000040;
+ Cấu hình Port0.6 ở mức tín hiệu thấp:
- IOCLR0 = 0x00000040;


Ví Dụ - Lập trình LED trên Board MCB2300
+ Các đèn LED trên Board được thể hiện qua Port2.0 đến port2.7:
Void LED_Init(void)
{
PINSEL10 = 0;
FIO2DIR = 0x000000FF; //P2.0 - P2.7 là Output.
FIO2MASK = 0x00000000;
}
+ Tắt / mở LES:
Void LED_On(unsigned int num)
{
FIO2SET = (1<<num); //VD: n=2 => FIO2SET = (1<<2) <=> FIO2SET = 0x04;
}
Void LED_Off(unsigned int num)
{
FIO2CLR = (1<<num);
}




Debug chương trình
Debug



Cấu trúc ARM Cortex M3 trên chip LPC1768

LPC1768 là 1 loại vi điều khiển sử dụng lõi ARM Cortex – M3 có tốc độ hoạt động cao 120MHz. Với đặc điểm của ARM Cortex – M3 sử dụng cấu trúc Harvard phân tầng 3-stage. Ngoại vi của LPC17xx gồm bộ nhớ flash 512kB, bộ nhớ dữ liệu 64kB, hỗ trợ Ethernet MAC, Host, Device, OTG USB, 8 kênh điều khiển GPDMA, 4 UART, 2 CAN, 2 SSP, SPI, 3 giao diện I2C, 2 I2S, 8 kênh ADC 12bit, bộ điều khiển NVIC 32bit, DAC 10bit, QEI, 4 timer, 6 PWM, RTC, 70 pin GPIO.
Ngoài ra LPC1768 còn hỗ trợ bộ điều khiển motor MCPWM, bộ điều khiển này cho phép người dùng điều khiển xung ra như mong muốn nhờ có thanh ghi Match, giúp hỗ trợ tốt trong việc điều khiển các loại động cơ 3 pha AC, DC và những ứng dụng cần chính xác về timing, counting, capture and comparation.
MCPWM có 3 kênh, mỗi kênh có thanh ghi Timer/Counter, Limit, Match 32bit, dead-time 10 bit, capture 32 bit, 2 ngõ ra modulated (MCOA và MCOB).




Sơ đồ khối MCPWM.

Cấu Trúc Cơ bản STM32- Sử Dụng ADC Của STM32F103RC

Ở bài này chúng ta sẽ tiếp cận cách sử dụng bộ ADC của STM32F103RC thông qua các ứng dụng chuyển đổi giá trị tín hiệu tương tự sang số.

1 Môi trường phát triển phần cứng

1.1 Hỗ trợ ADC của GEM3v0.1
Ở board GEM3v0.1, có nhiều chân được thiết kế dành riêng cho các tác vụ tổng hợp như: GPIOs, PWM, ADC, DAC, TIMER, Temperature sensor,…



Ở hình trên ta thấy chân số 14 của STM32F103x được thiết kế đa chức năng. Ở ví dụ này, chúng ta sẽ sử dụng nó như là đầu vào dữ liệu cho bộ ADC.
Một số đặc tính cơ bản của bộ ADC của STM32F103x:
+ Độ phân giải 12-bit và tần suất lấy mẫu là 56MHz(khoảng 1us một mẫu).
+ 18 kênh chuyển đổi trong đó: 16 kênh dành cho tín hiệu ngoại được đánh số lần lượt từ: AIN0,AIN1,…AIN15; 2 kênh còn lại dành cho cảm biến nhiệt nội và vôn kế nội.
+ Bộ ADC được cấp nguồn riêng từ 2.4V đến 3.6V.
+ Hỗ trợ 2 loại chuyển đổi: regular, injected.
Ở board GEM31v0.1, bộ ADC được cấp nguồn trực tiếp 3.3V. Điện áp tham chiếu Vref+ bằng 3.3V.
Độ phân giải 12bit cho phép mã hóa các tín hiệu tương tự từ 0->3.3 sang giá trị số từ 0->4095. Giá trị lượng tử được tính bằng:
Quantizer = 3.3 / 2^12 = 3.3/4096 = 0.8mV
1.2 Cảm biến nhiệt LM35DZ
Cảm biến nhiệt LM35DZ gồm 3 chân:



Nguồn cung cấp cho chân +Vs vào khoảng từ 4V đến 30V. Ở chân xuất dữ liệu, khi nhiệt độ bằng 0 điện áp ra sẽ là 0V. Cảm biến này đo nhiệt độ theo thang Celcius. Cứ mỗi một đơn vị nhiệt độ sẽ tương ứng với 10mV. Và mức thay đổi là tuyến tính. Ví dụ nếu nhiệt độ hiện giờ là 25 độ Celcius, thì điện áp xuất sẽ là 10mVx25 = 250mV. Như vậy, với giá trị lượng tử là 0.8mV, chúng ta hoàn toàn có khả năng lấy mẫu chính xác giá trị từ cảm biến nhiệt.
Trong ứng dụng tích hợp với board GEM3v0.1, nguồn cấp cho cảm biến là 5V.
Sơ đồ mạch kết nối với STM32 được thiết kế như sau:



2 Cấu trúc chương trình
2.1 Sơ đồ khối



2.2 Cấu hình hoạt động ADC



Giải thích:
(1): Sử dụng hàm chuẩn thư viện CMSIS RCC_APB2PeriphClockCmd để kích hoạt các ngoại vi trên APB2, ở đây ta kích hoạt ADC1:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

(2): Để nhận được dữ liệu dạng tương tự, ta phải cấu hình chân dữ liệu hoạt động ở chế độ Analog Input. Ở demo này, ta sử dụng chân số 14 , tương ứng là chân 0(GPIO_Pin_0) của Port A(GPIOA) , ký hiệu là PA0
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);

(3): Cấu hình chế độ hoạt động của ADC1
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);

(4): Cấu hình ADC Channel, ở ví dụ này, ta cấu hình ADC Channel 0 (ADC_Channel_0) hoạt đông như là Regular Channel với thời gian lấy mẫu là 55 chu kỳ
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5);

(5): Kích hoạt bộ ADC1
ADC_Cmd(ADC1, ENABLE);

(6): Kích hoạt Reset Calibration, khởi động lại bộ lấy mẫu chuẩn và chờ cho quá trình tái khởi động hoàn tất
ADC_ResetCalibration(ADC1);

while(ADC_GetResetCalibrationStatus(ADC1));
(7): Kích hoạt chế độ lấy mẫu và cũng chờ cho nó hoàn tất
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));

(8): Kích hoạt chế độ chuyển đổi
ADC_SoftwareStartConvCmd(ADC1, ENABLE);

2.3 Đọc dữ liệu từ LM35DZ
Chân dữ liệu của LM35DZ được nối trực tiếp tới chân PA0. Để đọc dữ liệu đã được chuyển đổi bởi khối ADC1 ta sử dụng hàm
uint16_t adc = 0;
adc = ADC_GetConversionValue(ADC1);

Giá trị này đã được lượng tử hóa , do đó chúng ta phải tính toán lại giá trị thực theo công thức:
Điện áp thực = Vref * (Giá trị lượng tử) / 2^n
= 3.3 * (giá trị lượng tử)/ 4096.
Giả sử giá trị chuyển đổi đọc từ ADC1 là 251, khi đó điện áp thực nhận từ LM35DZ là:
Điện áp thực = 3.3 * 251 / 4096 = 202mV
Khi đó nhiệt độ thực sẽ là:
Nhiệt độ thực = Điện áp thực / 10 = 20.2 độ C
3. Tài nguyên chương trình
Download dự án ở đây.
Các bạn dùng cáp cổng COM nối board với máy tính để coi giá trị đọc từ cảm biến.

Trích nguồn http://www.arm.vn

Hướng Dẫn Lập Trình ARM - LPC1343


Nội Dung:
+ Giới Thiệu về LPC1343
+ Giới thiệu LPCXpresso LPC1343 board
+ Hướng dẫn Lập Trình cho LPC1343 bằng LPCXpresso IDE- Code Red
+ Cài đặt LPCXpresso IDE Code red
+ Tạo Project trong LPCXpresso IDE Code red
+ Code mẫu ARM LPC1343


Giới Thiệu về LPC1343
+ LPC1343 thuộc dòng Vi điều khiển ARM Cortex-M3, kiến trúc Harvard.
+ Hoạt động ở tần số CPU lên đến 72MHz.
+ 32KB bộ nhớ chương trình, 8KB SRAM, USB Device.
+ USB 2.0, UART hỗ trợ RS-485, I2C, 42 PINs I/O
+ WatchDog Timer
...


Sơ Đồ Khối



Các PIN





Kit phát triển: LPCXpresso development board







+ Trên Board gồm 2 thành phần: LPC-Link và Target.
+ LPC-Link là một mạch nạp với 1 dăm 10 PINs dành cho việc kết nối vớicác thiết bị khác. Bên cạnh đó nó được kết nối sẵn với bo mạch LPC1343 qua một giao diện USB để tiến hành nạp Kit, debug.
+ LPC1343 có thể dễ dàng kết nối ra ngoài qua các chân được nối sẵn.








Hướng dẫn Lập Trình cho LPC1343


Cài đặt chương trình
+ Để lập trình ứng dụng cho Kit LPCXpresso LPC1343, ta sử dụng trình biên dịch LPCXpresso IDE - Code Red.
+ Để Download phần mềm: các bạn vào trang http://lpcxpresso.code-red-tech.com/LPCXpresso/ tạo tài khoản:





Đăng nhập vào và Download:



Chọn Windows (Hoặc Linux)



Chọn bản mới nhất:





... đợi tải về, cài đặt theo mặc định.


Sau khi cài đặt, chạy phần mềm. Để kích hoạt FULL phần mềm, các bạn vào Help -> Product activation -> Create Serial number and Activate:





Coppy Serial number lại:



Nhấn OK, giao diện làm việc của LPCXpresso IDE sẽ tự động chuyển đến trang đăng ký cho bạn: (hoặc bạn có thể đăng nhập lại vào website ở trên)



Sau khi nhập Serial number vào, ấn send me my activation code, Code sẽ được gửi vào email đăng ký của bạn:



Coppy code, vào Help -> Product activation -> Enter Activation code và nhập Code. Xong ok!















Các Bước Tạo Project trong LPCXpresso IDE


Bước 1: chọn nơi chứa Project
+ Chọn File -> Switch Workspace -> Other, rồi chọn thư mục mong muốn.
(ta nên tạo riêng 1 thư mục cho Project, và coppy file thư viện chính (CMSIS) vào cùng Folder này)







Bước 2: Nhập thư viện CMSIS
+ Thư viện CMSISv2p00_LPC13xx.zip cho LPC1343 - Download tại đây!
Chọn Import Project(s) -> Browse, chọn đến thư viện CMSIS 2.0 LPC13xx.














Sau khi add, thư viện sẽ hiển thị trong thẻ Project Ex.









Bước 3: Tạo Project mới
Trong thẻ Quickstart: Chọn New project -> NXP LPC1300 -> C Project -> Next:







Đặt tên Project:






Chọn loại LPC cụ thể (LPC1343):







Bỏ chọn mục Enable CRP in the target image -> Finish:





Chương trình chính của chúng ta sẽ được viết trong file main.c, chúng ta sẽ viết thử 1 chương trình nháy LED ở chân P0.7:






Bước 4: Thêm các file thư viện cần thiết


+ Để thực hiện chương trình nháy LED, chúng ta cần phải cấu hình các chân của LPC, thực hiện trễ, do đó ta cần đến 2 file thư viện là gpio.c, gpio.h và timer32.c, timer32.h. Tiến hành kéo thả các file đó vào thư mục src trong Project:
+ Các bạn có thể download một số thư viện ở đây!








Bước 5: Viết chương trình


Chương trình trong hàm main.c:
#include "LPC13xx.h" /* LPC13xx definitions */
#include "gpio.h"
#include "timer32.h"


/* Main Program */


int main (void)
{
init_timer32(0, TIME_INTERVAL); //cấu hình timer0
enable_timer32(0); //cho phép timer0 hoạt động


GPIOInit(); //khởi tạo GPIO
GPIOSetDir( 0 , 7 , 1 ); //Đặt chân P0.7 là đầu ra "1"


while (1) /* Loop forever */
{


GPIOSetValue( 0 , 7 , 1 ); //Set chân P0.7 lên "1"
delay32Ms(0,500); //trễ 500Ms
GPIOSetValue( 0 , 7 , 0 ); //Set chân P0.7 về "0"
delay32Ms(0,500); //trễ 500Ms
}
}


Bước 6: Thêm đường dẫn đến các thư mục chứa thư viện


+ Ở đây ta sử dụng các thư viện của CMSIS trong thư mục inc, src của nó, và các thư viện khác trong thư mục chính src của Project. Do đó ta cần phải chỉ rõ đường dẫn đến các thư mục này:
+ Chuột phải vào tên của Project trong thẻ Project Ex -> chọn Properties:






+ Cửa sổ Properties hiện ra: Chọn C/C++ Build -> Settings -> Tool Settings -> Includes -> Ấn vào biểu tượng Add -> Workspace -> chọn Folder muốn Add -> Ok (8) -> Lại chọn tiếp các Folder còn lại -> Sau khi Add hết ấn Ok (9) :








Bước 7: Build chương trình
Trong thẻ Quickstart chọn Build 'demo' [Debug] , đợi cho chương trình Build xong -> xuất hiện thông báo:







Bước 8: Nạp vào Board LPC1343
+ Dùng Cable USB kết nối Board LPC1343 với PC.
+ Nạp chương trình: mở Folder Debug trong giao diện Project -> chuột phải vào file demo.axf -> Chọn Binary Utilities -> Program Flash :







+ Kết quả sau khi nạp xong: (LED trên Board sẽ nháy theo như chương trình)



DBS M05479
Quang Cao