📄 my93c46.c
字号:
/**************************************************************
Program: Test 93C46 access
Author: Yu Liangyao, yly@mail.tsinghua.edu.cn
Date: 2002-9-22
Update: 2002-10-2
(for test only)
Note: It is very easy to expand to 93c56/66, ect,
but not implemented here.
**************************************************************/
#include "my93c46.h"
/**************************************************************/
//MW-Transfer function
uint mw_trans(uint dat,uchar bits)
{
uint res=0,idx;
uint tmp;
tmp=dat;
for(idx=0;idx<bits;idx++)
{
res<<=1;
SK_0;
SET_DI((tmp>>15)&0x01); _mynop_();
tmp<<=1;
SK_1; _mynop_();
res|=GET_DO(0);
SK_0; _mynop_();
}
SET_DI(0);
return res;
}
/**************************************************************/
//Erase a byte function
uchar mw_erase(uchar address)
{
mw_ewen();
CS_1;
mw_trans(MW_ERASE|(((uint)(address & ADDR_MSK))<<(16-3-ADDR_LEN)),CMD_LEN);
CS_0;
_mynop_();
CS_1;
while(GET_DO(0)==0);
CS_0;
mw_ewds();
return TRUE;
}
/**************************************************************/
//Erase all function
uchar mw_eral(void)
{
mw_ewen();
CS_1;
mw_trans(MW_ERAL,CMD_LEN);
CS_0;
_mynop_();
CS_1;
while(GET_DO(0)==0);
CS_0;
mw_ewds();
return TRUE;
}
/**************************************************************/
//Erase/Write disable
uchar mw_ewds(void)
{
CS_1;
mw_trans(MW_EWDS,CMD_LEN);
CS_0;
return TRUE;
}
/**************************************************************/
//Erase/Write enable
uchar mw_ewen(void)
{
CS_1;
mw_trans(MW_EWEN,CMD_LEN);
CS_0;
return TRUE;
}
/**************************************************************/
//Test function
uchar mw_test(void)
{
uint res;
CS_1;
res=mw_trans(MW_READ,CMD_LEN);
mw_trans(DUMMY_WORD,DATA_LEN);
CS_0;
return ((res&0x01)==0)?TRUE:FALSE;
}
/**************************************************************/
//Read function
uint mw_read(uchar address)
{
uint res;
CS_1;
mw_trans(MW_READ|(((uint)(address & ADDR_MSK))<<(16-3-ADDR_LEN)),CMD_LEN);
res=mw_trans(DUMMY_WORD,DATA_LEN);
CS_0;
return res;
}
/**************************************************************/
//Write funcion
uchar mw_write(uchar address,uint dat)
{
mw_ewen();
CS_1;
mw_trans(MW_WRITE|(((uint)(address & ADDR_MSK))<<(16-3-ADDR_LEN)),CMD_LEN);
mw_trans(((uint)dat)<<(16-DATA_LEN),DATA_LEN);
CS_0;
_mynop_();
CS_1;
while(GET_DO(0)==0);
CS_0;
mw_ewds();
return TRUE;
}
/**************************************************************/
//Write all function
uchar mw_wral(uint dat)
{
mw_ewen();
CS_1;
mw_trans(MW_WRAL,CMD_LEN);
mw_trans(((uint)dat)<<(16-DATA_LEN),DATA_LEN);
CS_0;
_mynop_();
CS_1;
while(GET_DO(0)==0);
CS_0;
mw_ewds();
return TRUE;
}
/**************************************************************/
uchar mw_init(void)
{
CS_0;
SK_0;
DI_0;
return TRUE;
}
/**************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -