📄 hal.c
字号:
//*********************************************************************
// VANDER PROPRIETARY
//
// COPYRIGHT (c) 2006 BY VANDER ENGINEERING LTD.
// -- ALL RIGHTS RESERVED --
//
//
// File Name: HAL.c
// Author: Willie Hu
// Created: 23 Juen 06
// Modified:
// Revision: 2.0
// Description: Hardware platform interface layer
//*********************************************************************/
#include "common.h"
#include "HAL.H"
unsigned long IntEnTemp;
unsigned char SL811Read(unsigned char a)
{
unsigned long nVal;
disable_INT();
IO0DIR = IO0DIR|(0XFF<<SL811_DATA); //DATA口设置为输出
IO0CLR = 0XFF<<SL811_DATA; //写入地址
IO0SET = a<<SL811_DATA;
IO0CLR = (1<<SL811_CS)|(1<<A0)|(1<<SL811_WRn); //SL811_CS=0,A0=0,WRn=0
IO0SET = (1<<SL811_WRn)|(1<<A0); //A0=1 ,WRn=1
IO0CLR = 1<<SL811_RDn; //RDn=0
IO0DIR = IO0DIR&(~(0XFF<<SL811_DATA)); //读出数据
nVal = IO0PIN>>SL811_DATA;
IO0SET = 1<<SL811_RDn;
IO0SET = 1<<SL811_CS; //SL811_CS = 1
enable_INT();
return (unsigned char) nVal;
}
void SL811Write(unsigned char a, unsigned char d)
{
disable_INT();
IO0DIR = IO0DIR|(0XFF<<SL811_DATA); //DATA口设置为输出
IO0CLR = 0XFF<<SL811_DATA; //写入地址
IO0SET = a<<SL811_DATA;
IO0CLR = (1<<SL811_CS)|(1<<A0)|(1<<SL811_WRn); //SL811_CS=0,A0=0,WRn=0
IO0SET = (1<<SL811_WRn)|(1<<A0); //A0=1,WRn=1
IO0CLR = 0XFF<<SL811_DATA; //写入数据
IO0SET = d<<SL811_DATA;
IO0CLR = 1<<SL811_WRn; //WRn=0
IO0SET = 1<<SL811_WRn; //WRn=1
IO0SET = 1<<SL811_CS; //SL811_CS=1;
enable_INT();
}
void SL811BufRead(unsigned char addr, unsigned char *s, unsigned char c)
{
unsigned long i;
disable_INT();
IO0DIR = IO0DIR|(0XFF<<SL811_DATA); //DATA口设置为输出
IO0CLR = 0XFF<<SL811_DATA; //写入地址
IO0SET = addr<<SL811_DATA;
IO0CLR = (1<<SL811_CS)|(1<<A0)|(1<<SL811_WRn); //SL811_CS=0,A0=0,WRn=0
IO0SET = (1<<SL811_WRn)|(1<<A0); //A0=1 ,WRn=1
IO0DIR = IO0DIR&(~(0XFF<<SL811_DATA)); //读出数据
for(i=0;i<c;i++)
{
IO0CLR = 1<<SL811_RDn; //RDn=0
*s++ = (unsigned char)(IO0PIN>>SL811_DATA);
IO0SET = 1<<SL811_RDn;
}
IO0SET = 1<<SL811_CS; //SL811_CS = 1
enable_INT();
}
void SL811BufWrite(unsigned char addr, unsigned char *s, unsigned char c)
{
disable_INT();
IO0DIR = IO0DIR|(0XFF<<SL811_DATA); //DATA口设置为输出
IO0CLR = 0XFF<<SL811_DATA; //写入地址
IO0SET = addr<<SL811_DATA;
IO0CLR = (1<<SL811_CS)|(1<<A0)|(1<<SL811_WRn); //SL811_CS=0,A0=0,WRn=0
IO0SET = (1<<SL811_WRn)|(1<<A0); //A0=1,WRn=1
while (c--)
{
IO0CLR = 0XFF<<SL811_DATA; //写入数据
IO0SET = *s++<<SL811_DATA;
IO0CLR = 1<<SL811_WRn; //WRn=0
IO0SET = 1<<SL811_WRn; //WRn=1
}
IO0SET = 1<<SL811_CS; //SL811_CS=1;
enable_INT();
}
unsigned short WordSwap(unsigned short input)
{
return(((input&0x00FF)<<8)|((input&0xFF00)>>8));
}
void DelayMs(unsigned long nFactor)
{
unsigned long i;
unsigned long j;
for(i=0; i<nFactor; i++)
{
for(j=0;j<1000;j++)
j=j;
}
}
unsigned short LSwapINT16(unsigned short dData1,unsigned short dData2)
{
unsigned short dData;
dData = ((dData2<<8)&0xff00)|(dData1&0x00ff);
return dData;
}
unsigned long LSwapINT32(unsigned long dData1,unsigned long dData2,unsigned long dData3,unsigned long dData4)
{
unsigned long dData;
dData = ((dData4<<24)&0xff000000)|((dData3<<16)&0xff0000)|((dData2<<8)&0xff00)|(dData1&0xff);
return dData;
}
void ComSendByte(unsigned char c)
{
while((U0LSR&0X40)==0); //等待发送数据结束
U0THR = c; //发送数据
}
void disable_INT(void) //关闭IRQ和FIQ
{
long tmp;
__asm
{
MRS tmp, CPSR
ORR tmp, tmp, #0x80 //置位I_Bit
MSR CPSR_c, tmp
ORR tmp, tmp, #0x40 //置位F_Bit
MSR CPSR_c, tmp
}
}
void enable_INT(void) //使能IRQ和FIQ
{
long tmp;
__asm
{
MRS tmp, CPSR
BIC tmp, tmp, #0xc0 //清除F_Bit和I_Bit
MSR CPSR_c, tmp
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -