📄 iic_spi.c
字号:
void MCBSP_int(MCBSP_Handle m_Mcbsp)
{
IRQ_globalDisable();
MCBSP_ASSERT_HANDLE(m_Mcbsp,return 00);
MCBSP_start(m_Mcbsp,
MCBSP_XMIT_START | MCBSP_RCV_START |
MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC,
0x300u);
asm( " nop");
asm( " nop");
asm( " nop");
asm( " nop");
spiintsign = MCBSP_getRcvEventId(m_Mcbsp);
IRQ_globalEnable();
return;
}
interrupt void MCBSP1_RX()
{
IRQ_globalDisable();
m_Spi_Buf.lBuf[m_Spi_Buf.iHead++]= MCBSP_read8(hMcbsp1);
if(m_Spi_Buf.iHead>=399)m_Spi_Buf.iHead=0;
IRQ_globalEnable();
}
unsigned int SendData(MCBSP_Handle m_Mcbsp,unsigned int *data,unsigned int len)
{
unsigned int i;
unsigned int *p;
MCBSP_ASSERT_HANDLE(m_Mcbsp,return 0);
if(data==NULL)
return 0;
p=data;
for(i=0;i<len;i++)
{
while (!MCBSP_xrdy(m_Mcbsp));
MCBSP_write8(m_Mcbsp, p[i]);
}
return 1;
}
void WriteFlash(MCBSP_Handle m_Mcbsp,int *data,unsigned long addr,int len,int m_Int)
{
int i,h,j=0;
unsigned int s[5];
unsigned long add;
memset(s,0,5);
add=addr;
for(i=0;i<len;i++)
{
s[0]=0x06;
s[1]=0x00;
s[2]=0x00;
s[3]=0x00;
s[4]=0x00;
SendData(m_Mcbsp,s,5);
s[0]=0x02;
s[1]=(add>>16) & 0xff;
s[2]=(add>>8) & 0xff;
s[3]=add & 0xff;
s[4]=*(data+j);
j++;
SendData(m_Mcbsp,s,5);
add+=1;
while(1)
{
for(h=0;h<=1000;h++);
if(!(ReadStatus(m_Mcbsp,m_Int))) break;
}
asm( " nop");
asm( " nop");
}
}
void ReadFlash(MCBSP_Handle m_Mcbsp,unsigned long addr,int len,int m_Int)
{
int i;
unsigned long add;
add=addr;
index=2;
for(i=0;i<len;i++)
{
ExIRQ_Disable(m_Int);
while (!MCBSP_xrdy(m_Mcbsp));
MCBSP_write8(m_Mcbsp, 0x03);
while (!MCBSP_xrdy(m_Mcbsp));
MCBSP_write8(m_Mcbsp, add>>16);
while (!MCBSP_xrdy(m_Mcbsp));
MCBSP_write8(m_Mcbsp, add>>8);
while (!MCBSP_xrdy(m_Mcbsp));
MCBSP_write8(m_Mcbsp, add);
while (!MCBSP_xrdy(m_Mcbsp));
MCBSP_write8(m_Mcbsp, 0x0);
ExIRQ_Enable(m_Int);
while (!MCBSP_xrdy(m_Mcbsp));
add+=1;
}
ExIRQ_Disable(m_Int);
}
void EraseFlash(MCBSP_Handle m_Mcbsp,unsigned long addr,unsigned int m_index,int m_Int)
{
unsigned int i,u=0,s[5];
memset(s,0,5);
s[0]=0x06;
SendData(m_Mcbsp,s,5);
if(m_index==0)
{
s[0]=0x52;
s[1]=(addr>>16) & 0xff;
s[2]=(addr>>8) & 0xff;
s[3]=addr & 0xff;
s[4]=0x0;
SendData(m_Mcbsp,s,5);
while(1)
{
for(i=0;i<=1000;i++);
if(!(ReadStatus(m_Mcbsp,m_Int)))
{
u++;
if(u>3)break;
}
}
}
else
{
s[0]=0x60;
SendData(m_Mcbsp,s,5);
while(1)
{
for(i=0;i<=1000;i++);
if(!(ReadStatus(m_Mcbsp,m_Int)))
{
u++;
if(u>3)break;
}
}
}
asm( " nop");
asm( " nop");
}
I2C_Config Config1 = {
0x0000, /* own address*/
0x0000, /*isr*/
0x0410, /*str*/
0x002d, /*clkl*/
0x002d, /*clkh*/
0x0080, /*data count*/
0x0050, /*slave address*/
0x4600, /*cmdr*/
0x0000, /*isr resource*/
0x0014 /*psc*/
};
void iic_init1()
{
int i;
/* int a[8];
// j=0;
*/
m_I2CMDR = (Uint16 *)0x3c09;
for(i=0;i<10000;)i++;
I2C_config(&Config1);
for(i=0;i<10000;)i++;
*m_I2CMDR |= 0x0020; /*使能数字锁相环模式*/
for(i=0;i<10000;)i++;
}
int M_test()
{
static Uint16 IICMtest[4] = {0x00,0xf0,0xee,0xff};
static Uint16 testdata[2] = {0,0};
static Uint16 testadd[2] = {0x00,0xf0};
int j,a,b=1,q=0;
for(j=0;j<=4;j++) /*写存储器测试字,若出错进行3次写入读出效验*/
{
I2C_write(IICMtest,4,1,0x51,1,30000);
delayiic();
I2C_write(testadd,2,1,0x51,1,30000);
I2C_read(testdata,2,1,0x51,1,30000,1);
for(a=0;a<2;a++)
{
if(testdata[a]==IICMtest[a+2])q=1;
else q=0;
b=b&q;
}
if(b==1)break;
else if(j>=3)
{
DisP_Chat(&c_tab1[0]);/*显示错误信息,并清写卡标志,不再执行写卡操作*/
return b;
}
}
return b;
}
int T_test()
{
static Uint16 IICTtest[3] = {0x12,0x51,0xAD};
static Uint16 testdata[2] = {0,0};
static Uint16 testadd[1] = {0x12};
int j,a,b=1,q=0;
for(j=0;j<=4;j++) /*写存储器测试字,若出错进行3次写入读出效验*/
{
I2C_write(IICTtest,3,1,0x50,1,30000);
delayiic();
I2C_write(testadd,1,1,0x50,1,30000);
I2C_read(testdata,2,1,0x50,1,30000,1);
for(a=0;a<2;a++)
{
if(testdata[a]==IICTtest[a+1])q=1;
else q=0;
b=b&q;
}
if(b==1)break;
else if(j>=3)
{
m_Keyboardinfo.TimeShowcard=0;
DisP_Chat(&c_tab1[0]);
firstdelay();
return b;
}
}
return b;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -