📄 aaci.cpp
字号:
#include "stdafx.h"
#include "AACI.h"
#include "wm9712.h"
#include "CEDDK.h"
#define LOOP_TIME 10000
#define ENTERMUTEX //WaitForSingleObject(hMutex, INFINITE)
#define RELEASEMUTEX //ReleaseMutex(hMutex)
#define udelay(time) Sleep(time)
void CAACI::MapAACIReg()
{
PHYSICAL_ADDRESS PhysicalAddress;
PhysicalAddress.HighPart = 0;
PhysicalAddress.LowPart = AACI_BASE;
m_addrAACIBase = (UCHAR *)MmMapIoSpace(PhysicalAddress, AACI_HWREGS_SIZE, FALSE);
if( !m_addrAACIBase )
{
RETAILMSG(1, (TEXT("MapAACIReg: Map AACI hardware registers failed")));
}
}
void CAACI::UnMapAACIReg()
{
if(m_addrAACIBase)
{
MmUnmapIoSpace(m_addrAACIBase, AACI_HWREGS_SIZE);
m_addrAACIBase = NULL;
}
}
int CAACI::apAACI_WriteRegister(volatile int reg, int value)
{
int timer;
if(!m_addrAACIBase)return FALSE;
//AACI_SLFR ---#define AACI_SL1TXBUSY 0x0002---Slot 1 transceive busy????
// Wait for TX1/2 not to be busy
timer = LOOP_TIME;
ENTERMUTEX;
while ((*((DWORD*)(m_addrAACIBase+AACI_SLFR)) & AACI_SL1TXBUSY) && timer) {//等待slot1 的传送寄存器空闲
udelay(10);
timer--;
}
// Note: the data value must be setup before the address
*((DWORD*)(m_addrAACIBase+AACI_SL2TX)) = value << 4;//数据寄存器
*((DWORD*)(m_addrAACIBase+AACI_SL1TX)) = reg << 12;//地址寄存器
RELEASEMUTEX;
if (timer)
return TRUE;
else
return FALSE;
}
int CAACI::apAACI_ReadRegister(volatile int reg)
{
int timer;
unsigned int data;//, stat;
if(!m_addrAACIBase)return FALSE;
ENTERMUTEX;
timer = AACI_TIMEOUT;
//先放数据,再放地址
while ((*((DWORD*)(m_addrAACIBase + AACI_SLFR)) & AACI_SL1TXBUSY) && timer) {//等待slot1 的传送寄存器空闲
udelay(10);
timer--;
}
//先放数据,再放地址
*((DWORD*)(m_addrAACIBase + AACI_SL2TX)) = 0;
//地址为8BIT,所以应该放在20位中的高8位,所以要向右移12位
*((DWORD*)(m_addrAACIBase + AACI_SL1TX)) = (reg << 12) | 0x80000;
timer = LOOP_TIME;
while(((*((DWORD*)(m_addrAACIBase+AACI_SLFR)) & 0x100) == 0) && timer){//当退出这个循环的时候表示数据已经接收到了
udelay(10);
timer--;
}
data = (*((DWORD*)(m_addrAACIBase+AACI_SL2RX)) >> 4);
RELEASEMUTEX;
return data;
}
CAACI::CAACI()
{
m_addrAACIBase = NULL;
MapAACIReg();
}
CAACI::~CAACI()
{
UnMapAACIReg();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -