久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
arm lpc2200串口定時器使用小結
[打印本頁]
作者:
liuda
時間:
2015-1-23 23:33
標題:
arm lpc2200串口定時器使用小結
昨天我本打算寫一篇關于arm的筆記的,可是昨天我學得是兩款芯片的使用,重點是nor flash的使用,我翻翻它的資料,覺得只要對時序圖有一定基礎的人都能夠搞定,自己也沒什么語言可寫,于是便沒有記錄,今天我學了兩個東西,一個是串口的使用,一個是定時器的使用。總之這兩個東西其實也不難,重點還是對lpc2200芯片相應模塊的寄存器要熟悉,下面附上我寫的程序,我把這兩個綜合在一塊寫的,注意要把開發板的UART0和PC的UART1(一般是上面那個)連接起來,同時還得把nitStacks.s中要把系統管理模式堆棧處的代碼改為“MSR CPSR_c, #0x5f”,即使能IRQ,否則永遠也實現不了。
#define spi_shcp 0x00000010 //0.4
#define spi_stcp 0x00000100 //0.8
#define spi_q7 0x00000020 //0.5
#define spi_ds 0x00000040 //0.6
#define UART_BPS 115200 //波特率
void delay(uint32 dly)
{ uint32 i;
for(; dly>0; dly--)
for(i=0; i<5000; i++);
}
void hc595send_data(uint8 data)
{
uint8 i;
IO0CLR = spi_stcp;
for(i=0;i<8;i++)
{
IO0CLR = spi_shcp;
if((data&0x80)!=0)IO0SET = spi_ds;
else IO0CLR = spi_ds;
data <<= 1;
IO0SET = spi_shcp;
}
IO0SET = spi_stcp;
}
const uint8 DISP_TAB[16] = { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
0x81,0x42,0x24,0x18,0x24,0x42,0x81,0x00 };
void UART0_Init(void)
{
uint16 fdiv;
U0LCR = 0x83; //DLAB = 1,可設置波特率
fdiv = (Fpclk/16)/UART_BPS; //設置波特率
U0DLM = fdiv/256;
U0DLL = fdiv%256;
U0LCR = 0x03; //DLAB = 0
}
void UART_SendByte(uint8 data)
{
U0THR = data;
while((U0LSR&0x40)==0);
}
void URAT_Send(uint8 *str)
{
while(1)
{
if(*str == '\0')break;
UART_SendByte(*str++);
}
}
uint8 mat=0;
void __irq IRQ_Timer0(void)
{
//uint8 i=0;
hc595send_data(~DISP_TAB[mat]);
UART_SendByte(mat);
if(++mat == 16)mat = 0;
T0IR = 0x01;
VICVectAddr = 0x00;
}
void Timer0_Init(void)
{
T0TC = 0;//定時器設置為0,即從0開始計數
T0PR = 0;//時鐘不分頻
T0MCR = 0x03;//設置TIMER0匹配后復位T0TC,并產生中斷標志
T0MR0 = Fpclk;//設置10s匹配值
T0TCR = 0x01;//啟動定時器
VICIntSelect = 0x00;
VICVectCntl0 = 0x24;
VICVectAddr0 = (uint32)IRQ_Timer0;
VICIntEnable = 0x00000010;
}
int main (void)
{// add user source code
uint8 i=0;
PINSEL0 = 0x00000005;
IO0DIR = 0x00000150;//0001 1/0 101 0000
UART0_Init();
Timer0_Init();
while(1);
/*如果不使用中斷調用程序,也是可以的,那要把imer0_Init()函數下的關于中斷的語句屏蔽掉,同時把下面的while語句開啟,還有把上面的while屏蔽;也一樣可以達到同樣的效果
while(1)
{
while((T0IR&0x01)==0);
T0IR = 0x01;
hc595send_data(~DISP_TAB[ i]);
URAT_Send((uint8 *)DISP_TAB);
if(++i == 16)i = 0;
}
*/
return 0;
}
作者:
liuda
時間:
2015-1-23 23:34
今天是個好日子,值得我紀念,因為我下午碰到了她在線,聊了一個下午,很有趣的;不過我犧牲了一個任務就是今天準備把arm開發板上的modem玩玩的,不過開心了一個下午,也值拉,好在她上線之前我又把串口更深入了些,就是說PC-->LPC2200-->PC這樣一個模式,昨天玩的式LPC2200-->PC模式,反正今天重點在FIFO的設置以及UOIIR寄存器的使用,我現把程序附上,由于這個最好采用中斷,即PC有數據發送時LPC2200便要中斷獲取數據,所以別忘了把InitStacks.s中要把系統管理模式堆棧處的代碼改為“MSR CPSR_c, #0x5f”,即使能IRQ;先把今天的程序附上:
#define spi_shcp 0x00000010 //0.4
#define spi_stcp 0x00000100 //0.8
#define spi_q7 0x00000020 //0.5
#define spi_ds 0x00000040 //0.6
#define UART_BPS 115200 //波特率
uint8 re_buf[8] = {0};
volatile uint8 re_new;
void delay(uint32 dly)
{ uint32 i;
for(; dly>0; dly--)
for(i=0; i<5000; i++);
}
void hc595send_data(uint8 data)
{
uint8 i;
IO0CLR = spi_stcp;
for(i=0;i<8;i++)
{
IO0CLR = spi_shcp;
if((data&0x80)!=0)IO0SET = spi_ds;
else IO0CLR = spi_ds;
data <<= 1;
IO0SET = spi_shcp;
}
IO0SET = spi_stcp;
}
const uint8 DISP_TAB[16] = { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
0x81,0x42,0x24,0x18,0x24,0x42,0x81,0x00 };
void UART0_Init(void)
{
uint16 fdiv;
U0LCR = 0x83; //DLAB = 1,可設置波特率
fdiv = (Fpclk/16)/UART_BPS; //設置波特率
U0DLM = fdiv/256;
U0DLL = fdiv%256;
U0LCR = 0x03; //DLAB = 0
}
void UART_SendByte(uint8 data)
{
U0THR = data;
while((U0LSR&0x40)==0);
}
void URAT_Send(uint8 *str)
{
while(1)
{
if(*str == '\0')break;
UART_SendByte(*str++);
}
}
void __irq IRQ_UART0(void)
{
uint8 i;
if(0x04==(U0IIR&0x0F))re_new=1;
for(i=0;i<8;i++)
{
re_buf[i]=U0RBR;
}
VICVectAddr = 0x00;
}
int main (void)
{// add user source code
uint8 i=0;
re_new=0;
PINSEL0 = 0x00000005;//UART0
PINSEL1 = 0x00000000;
IO0DIR = 0x00000150;//0001 1/0 101 0000
UART0_Init();
U0FCR = 0x81;//使能FIFO,并設置觸發點為8字節
U0IER = 0x01;//使能接收中斷
VICIntSelect = 0x00000000;
VICVectCntl0 = 0x26;
VICVectAddr0 = (uint32)IRQ_UART0;
VICIntEnable = 0x00000040;
// hc595send_data(~DISP_TAB[i]);
while(1)
{
if(re_new==1)
{
re_new=0;
hc595send_data(~DISP_TAB[i]);
URAT_Send((uint8 *)re_buf);
if((++i)==16)i=0;
}
}
return 0;
}
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美一级淫片免费视频黄
|
久久高清国产视频
|
91九色在线观看
|
国产精品美女久久久久aⅴ国产馆
|
日本午夜视频
|
成人做爰www免费看视频网站
|
天天插日日操
|
欧美精品久久久
|
99reav
|
国产高清在线观看
|
欧美1—12sexvideos
|
亚洲欧美日韩中文字幕一区二区三区
|
午夜一区二区三区在线观看
|
精品一区二区视频
|
亚洲精品久久久蜜桃
|
国产精品亚洲视频
|
中文字幕一区在线观看视频
|
精品久久香蕉国产线看观看亚洲
|
久久久久久高潮国产精品视
|
美女久久久久久久久
|
av网站在线播放
|
欧美一级欧美一级在线播放
|
久草在线免费资源
|
国产精品一区二区三区在线
|
午夜影院污
|
久久精品这里精品
|
日韩在线免费
|
亚洲精品久久久一区二区三区
|
在线观看视频h
|
五月天综合影院
|
91精品在线播放
|
天堂一区二区三区
|
91精品国产乱码久久久久久久久
|
精品美女在线观看视频在线观看
|
日本成人在线播放
|
亚洲国产69
|
久久九七
|
亚洲国产精品久久久久久
|
丝袜美腿av
|
久久久久久久久一区
|
日韩毛片视频
|