#define gpc0con *((volatile unsigned int *)0xe0200060)
#define gpc0dat*((volatile unsigned int *)0xe0200064)
#define gpa0con*((volatile unsigned int *)0xe0200000)
#define gpa0dat*((volatile unsigned int *)0xe0200004)
#define ulcon1 *((volatile unsigned int *)0xe2900400)
#define ucon1 *((volatile unsigned int *)0xe2900404)
#define ufcon1 *((volatile unsigned int *)0xe2900408)
#define umcon1 *((volatile unsigned int *)0xe290040c)
#define utrstat *((volatile unsigned int *)0xe2900410)
#define uerstat *((volatile unsigned int *)0xe2900414)
#define ufstat1 *((volatile unsigned int *)0xe2900418)
#define umstat1 *((volatile unsigned int *)0xe290041c)
#define utxh1 *((volatile unsigned int *)0xe2900420)
#define urxh1 *((volatile unsigned int *)0xe2900424)
#define ubrdiv1 *((volatile unsigned int *)0xe2900428)
#define udivslot *((volatile unsigned int *)0xe290042c)
#define uintp1 *((volatile unsigned int *)0xe2900430)
#define uintsp1 *((volatile unsigned int*)0xe2900434)
#define uintm1 *((volatile unsigned int*)0xe2900438)
void delay(volatileunsigned int t)
volatile unsigned int base = 0xa000;
while(t--)
for(base=0xa000;base;--base);
voidled_tip(unsigned int control)
volatile unsigned int temp;
if(control==0x03)/*燈1閃爍*/
temp = ~gpc0dat;
temp ^= ~(1<<3);
gpc0dat = temp;
delay(4);
else if(control==0x0a)/*燈2閃爍*/
temp = ~gpc0dat;
temp ^= ~(1<<4);
gpc0dat = temp;
delay(4);
else if(control==0x30)/*雙燈交替閃爍*/
gpc0dat = 0x08;
delay(2);
gpc0dat = 0x10;
delay(2);
else if(control==0xa0)/*雙燈同閃*/
gpc0dat = 0x18;
delay(2);
gpc0dat = 0;
delay(2);
void led_init()
gpc0con |= 0x11<<12;
void uart_init()
gpa0con = 0x00220000;
ulcon1 = 0x00000003;
ucon1 = 0x00000005;
ufcon1 = 0x00000001;
umcon1 = 0;
ubrdiv1 = 34;
udivslot = 0xdfdd;
static voidsend_byte(volatile unsigned char byte)
while((ufstat1 &(1<<24)));
utxh1=byte;
static volatileunsigned char recv_byte()
while(!(ufstat1 & 0xff))
led_tip(0x03);
return urxh1;
voidputchar(volatile unsigned char c)
send_byte(c);
if(c=='\n') send_byte('\r');
volatile unsignedchar getchar()
volatile unsigned char c;
c = recv_byte();
return c;
void puts(volatilechar *str)
volatile char *p = str;
while(*p) putchar(*p++);
putchar('\n');
void uart()
volatile unsigned char c;
volatile unsigned int temp;
led_init();
uart_init();
puts("puts your key and thelight will be changed");
puts("1 led1");
puts("2 led2");
while(1)
c = getchar();
putchar(c);
putchar('\r');
if(c=='1')
//temp =gpc0dat & (0x1<<3);
//temp^=0;
gpc0dat =0x10;
else if(c=='2')
//temp =gpc0dat & (0x1<<4);
//temp^=0;
//gpc0dat&= temp;
gpc0dat =0x08;
else
gpc0dat =0x18;
led_tip(0x0a);
串列埠可以輸出提示資訊,但是對於輸入沒有任何的反應,經過點燈的除錯,知道在接收的函式裡面一直迴圈等待,uart()函式裡面的while迴圈裡面的點燈測試程式是沒有機會執行的。現在發現輸入1、2和傳送字元1、2板子上的燈是有反應的,但是,輸入的字元並沒有顯示出來,這是為什麼?
好吧,我現在發現這個錯誤了,尷尬並且表示非常的吃驚!問題**如下,
不知道為什麼,這個地方需要換成』\n』或者不用,在後面判斷,最後的else是我現在才加的,不需要看。
S5PV210 裸機中斷
這裡我以外部中斷為例畫出了中斷響應的過程。當外部中斷得到響應,會由硬體自動轉到異常向量表,執行對應的異常處理程式。在這裡指的就是irq的處理程式。在異常處理程式irq handle中將會執行現場的保護與恢復,以及最重要的中斷處理函式 注意,這裡就來到了中斷處理部分,而不是異常處理了,相當於是乙個兩級...
我的S5pv210裸機程式設計
今天是2015年0910,用的是九鼎公司的s5pv210。開始動手的第一天。第一步 把通過看i210開發板硬體手冊中,關於撥碼開關的設定,選擇usb啟動的模式,設定為1 x1xx即可使用。第二步 安裝usb線的驅動,由於驅動在win7 64位中沒有簽名所以需要破解才能安裝驅動。先使用安裝檔案中的破解...
ARM裸機 S5PV210簡析
armv7架構是在armv6架構的基礎上誕生的。該架構採用了thumb 2技術,thumb 2技術是在arm的thumb 壓縮技術的基礎上發展起來的,並且保持了對現存arm解決方案的完整的 相容性。thumb 2技術比純32位 少使用 31 的記憶體,減小了系統開銷。同時能夠提供比已有的基於thum...