?? lpclib.c
字號:
#include "config.h"
#include "lpclib.h"
extern void IRQ_Eint0 (void)__irq;
extern void IRQ_Eint1 (void)__irq;
extern void IRQ_Eint2 (void)__irq;
extern void IRQ_Eint3 (void)__irq;
extern void IRQ_TIME1 (void)__irq;
extern void IRQ_UART1 (void)__irq;
//------------------------------------------------------------------------------------
//計算奇偶校驗
//unsigned char b_lrc (unsigned char dat)
//------------------------------------------------------------------------------------
unsigned char b_lrc (unsigned char dat)
{
unsigned char tmp;
unsigned char tmpdat;
tmp=(dat>>4)&0x0f;
tmpdat=(dat&0x0f)^tmp; //低四位或高4位
tmp=(tmpdat>>2)&0x03; //取低二位
tmpdat=(tmpdat&0x03)^tmp;
tmp=(tmpdat>>1)&0x01;
tmpdat=(tmpdat&0x01)^tmp;
return(tmpdat);
}
//----------------------------------------------------------------------------------------------------
//延時函數(shù)參數(shù)大延時長
//void DelayNS (uint32 dly)
//----------------------------------------------------------------------------------------------------
void DelayNS (uint32 dly)
{
uint32 i;
for ( ; dly>0; dly--)
for (i=0; i<50000; i++);
}
//----------------------------------------------------------------------------------------------------
//初始化串口0
//void UART0_Init (void)
//----------------------------------------------------------------------------------------------------
void UART0_Init (uint32 baud)
{
uint16 Fdiv;
PINSEL0 =(PINSEL0&(~0x0f))|0x05; //設(shè)置UART0連接,其他為普通IO 口
U0LCR = 0x80; // DLAB=1,允許設(shè)置波特率
Fdiv = (Fpclk / 16) / baud; // 設(shè)置波特率
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03;
}
//----------------------------------------------------------------------------------------------------
//初始化串口1
// void UART1_Init (void)
//----------------------------------------------------------------------------------------------------
void UART1_Init (uint32 baud)
{
uint16 Fdiv;
PINSEL0 =(PINSEL0&(~(0x0f<<16)))|(0x05<<16); //設(shè)置UART0連接,其他為普通IO 口
U1LCR = 0x80; // DLAB=1,允許設(shè)置波特率
Fdiv = (Fpclk / 16) / baud; // 設(shè)置波特率
U1DLM = Fdiv / 256;
U1DLL = Fdiv % 256;
U1LCR = 0x03; //鎖定設(shè)設(shè)置
U1FCR = 0X01; //使能FIFO并設(shè)置觸發(fā)點為1字節(jié)
U1IER = 0X01; //使能接收中斷
}
//----------------------------------------------------------------------------------------------------
//串口0發(fā)送一字節(jié)`
//void UART0_SendByte (uint8 dat)
//----------------------------------------------------------------------------------------------------
char Uart_Getch(void)
{
uint8 rcv_dat;
while ((U1LSR & 0x01) == 0);
rcv_dat = U1RBR;
return (rcv_dat);
}
//----------------------------------------------------------------------------------------------------
//串口0發(fā)送一字節(jié)`
//void UART0_SendByte (uint8 dat)
//----------------------------------------------------------------------------------------------------
void Uart_SendByte (uint8 dat)
{
U1THR = dat;
while ((U1LSR & 0x20) == 0); // 等待數(shù)據(jù)發(fā)送完畢
}
//----------------------------------------------------------------------------------------------------
//串口0發(fā)送字符串`
//void Uart0_SendString(char *pt)
//----------------------------------------------------------------------------------------------------
void Uart_SendString(char *pt)
{
while(*pt)
Uart_SendByte(*pt++);
}
//----------------------------------------------------------------------------------------------------
//串口打印
//void Uart_Printf(char *fmt,...)
//----------------------------------------------------------------------------------------------------
void Uart_Printf(char *fmt,...)
{
va_list ap;
char string[256];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
Uart_SendString(string);
va_end(ap);
}
//----------------------------------------------------------------------------------------------------
//串口0接接收一字符串`
//void Uart_GetString(char *string)
//----------------------------------------------------------------------------------------------------
void Uart_GetString(char *string)
{
char *string2=string;
char c;
while((c=Uart_Getch())!='\r')
{
if(c=='\b')
{
if( (int)string2 < (int)string )
{
Uart_Printf("\b \b");
string--;
}
}
else
{
*string++=c;
Uart_SendByte(c);
}
}
*string='\0';
Uart_SendByte('\n');
}
//-----------------------------------------------------------------------------------------------------
//端口初始化
//void Port_Init(void);
//------------------------------------------------------------------------------------------------------
void Port_Init(void)
{
// P00 RXD P01TXD P03 EINT1 P04 OUT P05 OUT P06 OUT P07 OUT P08 RXD P09TXD P010 IN P011 SCL P014 SDA P015 EINT2
//
// P0. 15 12 8 4 0
//|PINSEL0 | 10 11 00 00 | 11 00 01 01 | 00 00 00 00 | 11 00 01 01 | //控制功能=0xb0c500c5
//|IO0DIR | 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 0 | //低16位=0x78f0
// P016 EINT0 P018 CAP1.3 P019 CAP1.2 P020 EINT3 P021 OUT P022 OUT P028 OUT P029 IN
//
// P0. 31 28 24 20 16
//|PINSEL1 | 00 00 00 00 | 00 00 00 00 | 00 00 00 11 | 11 00 00 01 | //控制功能=0x000003c1
//|IO0DIR | 1 1 1 0 1 1 1 1 1 1 1 0 0 0 0 0 | //高16位=0xefe0
PINSEL1=0x000003c1; //IO狀態(tài)控制1
PINSEL0=0xb0c500c5; //IO狀態(tài)控制0
IO0DIR =0xefe078f0; //IO方向控制器
IO0SET =0x00000000; //IO置位寄存器
IO0CLR =0x00000000; //IO清除寄存器
//P117 OUT P119 OUT P121 IN P122 OUT P124OUT P125 OUT P127 OUT P129 IN P130 IN
// P. 31 24 16 8 0 //X位為0 P1.31- P1.26用作GPIO口
//|PINSEL2 | 0000 0000 | 0000 0000 | 0000 0000 | 0000 0YX0 | //X位為1 P1.31- P1.26用作JTAG調(diào)試口
// P. 31 24 16 8 0 //Y位為0 P1.25- P1.16用作GPIO口
//|PINSEL2 | 0000 0000 | 0000 0000 | 0000 0000 | 0000 0YX0 | //Y位為1 P1.25- P1.16用作跟蹤調(diào)試口
// IO1DIR 1001 1111 1101 1111 1111 1111 1111 1111 //IO1DIR=0x09fdfffff;
PINSEL2=PINSEL2&0xfffffff9;//除X,Y位外其它位不允許寫1 //用作GPIO口
IO1DIR =0x09fdfffff; //IO方向控制器
IO1SET =0x00000000; //IO置位寄存器
IO1CLR =0x00000000; //IO清除寄存器
}
/*
//----------------------------------------------------------------------------------------------------
//使能HD1 寫NS
//void Hd1_H(void)
//----------------------------------------------------------------------------------------------------
void Hd1_H(void)
{
if(FLAG_TRACK1==0)return;
//IO0SET 0000 0000 0000 0000 0000 0000 000x 0000
IO0SET=0x00000010; //寫入1
//IO1SET 0000 00X0 0000 0000 0000 0000 0000 0000
IO1CLR=0x02000000; //寫入0
}
//----------------------------------------------------------------------------------------------------
//使能HD1 寫SN
//void Hd1_L(void)
//----------------------------------------------------------------------------------------------------
void Hd1_L(void)
{
if(FLAG_TRACK1==0)return;
//IO0SET 0000 0000 0000 0000 0000 0000 000x 0000
IO0CLR=0x00000010; //寫入0
//IO1SET 0000 00X0 0000 0000 0000 0000 0000 0000
IO1SET=0x02000000;//寫入1
}
//----------------------------------------------------------------------------------------------------
//關(guān)閉寫磁頭
//void Hd1_L(void)
//----------------------------------------------------------------------------------------------------
void Hd1_off(void)
{
//IO0SET 0000 0000 0000 0000 0000 0000 000x 0000
IO0SET=0x00000010; //寫入1
//IO1SET 0000 00X0 0000 0000 0000 0000 0000 0000
IO1SET=0x02000000; //寫入1
}
//----------------------------------------------------------------------------------------------------
//使能HD2 寫NS
//void Hd1_H(void)
//----------------------------------------------------------------------------------------------------
void Hd2_H(void)
{
if(FLAG_TRACK2==0)return;
//IO0SET 0000 0000 0000 0000 0000 0000 00X0 0000
IO0SET=0x00000020; //寫入1
//IO0SET 0000 0000 0000 0000 0000 0000 0X00 0000
IO0CLR=0x00000040; //寫入0
}
//------------------------------------------------------------------------------------------------------
//使能HD1 寫SN
//void Hd1_L(void)
//----------------------------------------------------------------------------------------------------
void Hd2_L(void)
{
if(FLAG_TRACK2==0)return;
//IO0SET 0000 0000 0000 0000 0000 0000 00X0 0000
IO0CLR=0x00000020; //寫入0
//IO0SET 0000 0000 0000 0000 0000 0000 0X00 0000
IO0SET=0x00000040; //寫入1
}
//----------------------------------------------------------------------------------------------------
//關(guān)閉寫磁頭
//void Hd2_L(void)
//----------------------------------------------------------------------------------------------------
void Hd2_off(void)
{
//IO0SET 0000 0000 0000 0000 0000 0000 00X0 0000
IO0SET=0x00000060; //寫入1
//IO0SET 0000 0000 0000 0000 0000 0000 0X00 0000
// IO0SET=IO0SET|0x00000040; //寫入1
}
//----------------------------------------------------------------------------------------------------
//使能HD3 寫NS
//void Hd3_H(void)
//----------------------------------------------------------------------------------------------------
void Hd3_H(void)
{
if(FLAG_TRACK3==0)return;
//IO0SET 0000 0000 0000 0000 0000 0000 X000 0000
IO0SET=0x00000080; //寫入1
//IO1SET 0000 000X 0000 0000 0000 0000 0000 0000
IO1CLR=0x01000000; //寫入0
}
//----------------------------------------------------------------------------------------------------
//使能HD3 寫SN
//void Hd1_L(void)
//----------------------------------------------------------------------------------------------------
void Hd3_L(void)
{
if(FLAG_TRACK3==0)return;
//IO0SET 0000 0000 0000 0000 0000 0000 X000 0000
IO0CLR=0x00000080; //寫入0
//IO1SET 0000 000X 0000 0000 0000 0000 0000 0000
IO1SET=0x01000000; //寫入1
}
//----------------------------------------------------------------------------------------------------
//關(guān)閉寫磁頭
//void Hd3_off(void)
//----------------------------------------------------------------------------------------------------
void Hd3_off(void)
{
//IO0SET 0000 0000 0000 0000 0000 0000 X000 0000
IO0SET=0x00000080; //寫入1
//IO1SET 0000 000X 0000 0000 0000 0000 0000 0000
IO1SET=0x01000000; //寫入1
}
*/
void Hd1_H(void)
{
;
}
void Hd1_L(void)
{
;
}
void Hd2_H(void)
{
//IO0SET 0000 0000 0000 0000 0000 0000 00X0 0000
IO0SET=0x00000020; //寫入0
}
void Hd2_L(void)
{
//IO0SET 0000 0000 0000 0000 0000 0000 00X0 0000
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -