⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lpclib.c

📁 基于LP22132 KELL下的磁卡写卡器
💻 C
📖 第 1 页 / 共 2 页
字号:


#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);

  }
//----------------------------------------------------------------------------------------------------
//延时函数参数大延时长
//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; //设置UART0连接,其他为普通IO 口
 U0LCR = 0x80;                    // DLAB=1,允许设置波特率
 Fdiv  = (Fpclk / 16) / baud;     // 设置波特率
 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);    //设置UART0连接,其他为普通IO 口
 U1LCR = 0x80;                                   // DLAB=1,允许设置波特率
 Fdiv  = (Fpclk / 16) / baud;                    // 设置波特率
 U1DLM = Fdiv / 256;
 U1DLL = Fdiv % 256;
 U1LCR = 0x03;	                                 //锁定设设置
 U1FCR = 0X01;                                   //使能FIFO并设置触发点为1字节
 U1IER = 0X01;                                   //使能接收中断
}
//----------------------------------------------------------------------------------------------------
//串口0发送一字节`
//void UART0_SendByte (uint8 dat)
//----------------------------------------------------------------------------------------------------

char Uart_Getch(void)
{
 uint8 rcv_dat;
 
 while ((U1LSR & 0x01) == 0);
 rcv_dat = U1RBR;
 
 return (rcv_dat); 
}
//----------------------------------------------------------------------------------------------------
//串口0发送一字节`
//void UART0_SendByte (uint8 dat)
//----------------------------------------------------------------------------------------------------
void Uart_SendByte (uint8 dat)
{
 U1THR = dat;
 while ((U1LSR & 0x20) == 0);  // 等待数据发送完毕
}

//----------------------------------------------------------------------------------------------------
//串口0发送字符串`
//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状态控制1
 PINSEL0=0xb0c500c5;            //IO状态控制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调试口
//      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用作跟踪调试口
// 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
 }
//----------------------------------------------------------------------------------------------------
//关闭写磁头
//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
}
//----------------------------------------------------------------------------------------------------
//关闭写磁头
//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
}
//----------------------------------------------------------------------------------------------------
//关闭写磁头
//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 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -