Hướng dẫn Bài 2 - Bắt đầu học ARM Cortex-M0 trên NU-LB_002 Board

daotruongpro

http://vtechpro.vn
#1
Nu-LB_002 là Board mà Công ty Nuvoton đã đầu tư cho khoa Điện tử của các trường Đại Học tại Việt Nam học tập và nghiên cứu về dòng MCU-32bit mới này.
Nu-LB-NUC140_sm.jpg

Đây là Board có đầy đủ các giao tiếp ngoại vi nhất gồm cơ bản và nâng cao, với MCU NUC140 dòng MCU 32-bit mới nhất của Nuvoton.
Khi các bạn đã có đầy đủ các công cụ như phân mềm phần cứng chúng ta hoàn toàn có thể biên dịch nạp chương trình vào KIT.
-> Các công cụ cần thiết khi làm việc với dòng MCU này:
1. Keil c cho ARM - Trình biên dịch
Down tại đây: Keil Product Downloads chọn MDK-ARM
2. Driver Nu-Link - Bao gồm tập tin thư viện cho MCU của Nuvoton, nạp, debug = Nu-Link
Down tại đây:

Nuvoton Technology Corp. 新唐科技 -
Device Driver and Software Library

1.jpg

3. Bộ thư viện phát triển cho dòng chip NUC1XX
Down tại đây:

Nuvoton Technology Corp. 新唐科技 -
Device Driver and Software Library

2.jpg
Sau khi có đầy đủ các công cụ rồi sao lại không bắt đầu biên dịch, nạp chương trình đầu tiên nhỉ !
let's go! let's go !
3.jpg
4.jpg

5.jpg

Sau khi biên dịch chương trình xong thực hiện nạp chương trình nhấn vào biểu tượng Load Flash chờ hết 100% rồi chọn debug -> Run để mạch hoạt động hoặc nhấn nút Reset trên Board
2013-09-25 10.25.17.jpg

==> Finish.
Các bạn có thể tải về toàn bộ các Project ở file đính kèm
Mã:
#include <stdio.h>
#include "NUC1xx.h"
#include "Driver\DrvSYS.h"
#include "Driver\DrvGPIO.h"
#include "LCD_Driver.h"
#include "Seven_Segment.h"
void delay_loop(void)
{
uint32_t i,j;
for(i=0;i<3;i++)
{
for(j=0;j<60000;j++);
    }

}

/*----------------------------------------------------------------------------
  Interrupt subroutine
  ----------------------------------------------------------------------------*/
static unsigned char count=0;
static unsigned char loop=12;
void TMR0_IRQHandler(void) // Timer0 interrupt subroutine
{
    unsigned char i=0;
TIMER0->TISR.TIF =1;
count++;
if(count==5)
{
DrvGPIO_ClrBit(E_GPC,loop);
loop++;
count=0;
if(loop==17)
{
for(i=12;i<16;i++)
{
DrvGPIO_SetBit(E_GPC,i);
}
loop=12;
  }
}
}

void Timer_initial(void)
{
/* Step 1. Enable and Select Timer clock source */
SYSCLK->CLKSEL1.TMR0_S = 0;//Select 12Mhz for Timer0 clock source
    SYSCLK->APBCLK.TMR0_EN =1;//Enable Timer0 clock source

/* Step 2. Select Operation mode */
TIMER0->TCSR.MODE=1;//Select periodic mode for operation mode

/* Step 3. Select Time out period = (Period of timer clock input) * (8-bit Prescale + 1) * (24-bit TCMP)*/
TIMER0->TCSR.PRESCALE=0;// Set Prescale [0~255]
TIMER0->TCMPR  = 1000000;// Set TICR(TCMP) [0~16777215]
// (1/22118400)*(0+1)*(2765)= 125.01usec or 7999.42Hz

/* Step 4. Enable interrupt */
TIMER0->TCSR.IE = 1;
TIMER0->TISR.TIF = 1;//Write 1 to clear for safty
NVIC_EnableIRQ(TMR0_IRQn);//Enable Timer0 Interrupt

/* Step 5. Enable Timer module */
TIMER0->TCSR.CRST = 1;//Reset up counter
TIMER0->TCSR.CEN = 1;//Enable Timer0

TIMER0->TCSR.TDR_EN=1;// Enable TDR function
}

int main(void)
{
int i=0,j=0;
/* Unlock the protected registers */
UNLOCKREG();
  /* Enable the 12MHz oscillator oscillation */
DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1);

    /* Waiting for 12M Xtal stalble */
    SysTimerDelay(5000);

/* HCLK clock source. 0: external 12MHz; 4:internal 22MHz RC oscillator */
DrvSYS_SelectHCLKSource(0);
    /*lock the protected registers */
LOCKREG();

DrvSYS_SetClockDivider(E_SYS_HCLK_DIV, 0); /* HCLK clock frequency = HCLK clock source / (HCLK_N + 1) */

    for(i=12;i<16;i++)
{
DrvGPIO_Open(E_GPC, i, E_IO_OUTPUT);
    }

Initial_pannel();  //call initial pannel function
clr_all_pannal();

print_lcd(0, "ARM Cortex-M0  ");
print_lcd(1, "Program: TestKIT");
print_lcd(2, "Author:        ");
print_lcd(3, "    daotruongpro");
Timer_initial();

while(1)
{
for(i=0;i<9;i++)
{
for(j=0;j<4;j++)
{
close_seven_segment();
show_seven_segment(j,i);
delay_loop();
}
}
}
}
 

Đính kèm

Sửa lần cuối:
#4
công nhận dùng thanh ghi vẫn là dễ cho lập trình nhất bạn nhỉ, cho dù là con ARM đi nữa. nhưng lập trình theo thư viện của ST thì có cái lợi là lập trình code nhanh. nhưng cái hại là nhanh nhưng ko chắc. nếu dùng thư viện thì mình cũng đọc hết các thanh ghi và phần cứng thì mới ốp code.
 

daotruongpro

http://vtechpro.vn
#5
công nhận dùng thanh ghi vẫn là dễ cho lập trình nhất bạn nhỉ, cho dù là con ARM đi nữa. nhưng lập trình theo thư viện của ST thì có cái lợi là lập trình code nhanh. nhưng cái hại là nhanh nhưng ko chắc. nếu dùng thư viện thì mình cũng đọc hết các thanh ghi và phần cứng thì mới ốp code.
Làm theo thanh ghi cũng có cái hay của nó bạn à, nhưng chỉ nên làm với dòng 4-bit, 8-bit thôi nên 16-bit như MSP430 hay ARM là hơi mệt đấy. Ngồi mà đếm bit thì vỡ mặt X_X. Mình thì hay làm theo thư viện ít làm theo thanh ghi lắm đôi khi thích đổi gió thôi!
Làm theo thư viện sẽ mất ít thời gian hơn vì mỗi dòng chip có thư viện riêng cơ mà, :-bdlo gì
 

marketer182

Học sinh phổ thông
#9
Mình học UIT nhé.. hy vọng các bạn cùng nhau trao đổi về KIT Nuvoton140 này
 

UITsteven

Sinh viên đại học
#10
Đang hóng con này để mua mà hiệ tại ở Việt Nam chưa có bán, Tula chỉ bán NUC120 :-s
 

Quảng cáo Google