您需要 登录 才可以下载或查看,没有账号?注册
收藏0 举报
Ack_t AT21CS01_Reset(void) { u8 res = 0; AT21CS01_PowerOn(); delay_us(20); /*for(int i = 0; i < 70 ; i++)*/delay_ms(100); AT21CS01_IO_L(); delay_us(400); //RESET AT21CS01_IO_H(); delay_us(10); //T_RRT AT21CS01_IO_L(); delay_us(1); //T_MSDR 2~6us AT21CS01_IO_Input(); delay_us(1); res = GPIO_ReadInputDataBit(AT21CS01_IO_PORT, AT21CS01_IO_PIN); //read ACK AT21CS01_IO_Output(); AT21CS01_IO_H(); return res ? NACK : ACK; //read 1 -> NACK }
Ack_t AT21CS01_SendByte(u8 data) { u8 i = 0, res = 0; AT21CS01_IO_Output(); for(; i < 8; i++) { if(data & 0x80) //高位先发,高位为1 { if(SPEED_MODE == HIGH_SPEED) //高速模式 { AT21CS01_IO_L(); delay_us(TLOW_1_HighSpeed); //发送逻辑1中的低电平 AT21CS01_IO_H(); delay_us(THIGH_1_HighSpeed); //发送逻辑1中的高电平 } else //标速模式 { AT21CS01_IO_L(); delay_us(TLOW_1_StandardSpeed); //发送逻辑1中的低电平 AT21CS01_IO_H(); delay_us(THIGH_1_StandardSpeed);//发送逻辑1中的高电平 } } else //高位先发,高位为0 { if(SPEED_MODE == HIGH_SPEED) //高速模式 { AT21CS01_IO_L(); delay_us(TLOW_0_HighSpeed); //发送逻辑0中的低电平 AT21CS01_IO_H(); delay_us(THIGH_0_HighSpeed); //发送逻辑0中的高电平 } else //标速模式 { AT21CS01_IO_L(); delay_us(TLOW_0_StandardSpeed); //发送逻辑0中的低电平 AT21CS01_IO_H(); delay_us(THIGH_0_StandardSpeed); //发送逻辑0中的高电平 } } data <<= 1; } AT21CS01_IO_L(); //拉低准备接收ACK if(SPEED_MODE == HIGH_SPEED) { delay_us(TWACK_HighSpeed); } else { delay_us(TWACK_StandardSpeed); } AT21CS01_IO_Input(); __nop(); res = GPIO_ReadInputDataBit(AT21CS01_IO_PORT, AT21CS01_IO_PIN); //read ACK AT21CS01_IO_Output(); AT21CS01_IO_H(); //释放ACK结束 if(SPEED_MODE == HIGH_SPEED) { delay_us(TWACKHIGH_HighSpeed); } else { delay_us(TWACKHIGH_StandardSpeed); } return res ? NACK : ACK; }
u8 AT21CS01_ReadByte(Ack_t ack) { u8 i = 0, res = 0; AT21CS01_IO_Output(); for(; i < 8; i++) { res <<= 1; AT21CS01_IO_L(); if(SPEED_MODE == HIGH_SPEED) { delay_us(TRD_HighSpeed); } else { delay_us(TRD_StandardSpeed); } AT21CS01_IO_Input(); delay_us(1); //上拉时间 res |= GPIO_ReadInputDataBit(AT21CS01_IO_PORT, AT21CS01_IO_PIN); AT21CS01_IO_Output(); AT21CS01_IO_H(); if(SPEED_MODE == HIGH_SPEED) { delay_us(TRDHIGH_HighSpeed); } else { delay_us(TRDHIGH_StandardSpeed); } } if(SPEED_MODE == HIGH_SPEED) { if(ack == ACK) { MACK_HighSpeed(); } else//if(ack == NACK) { MNACK_HighSpeed(); } } else { if(ack == ACK) { MACK_StandardSpeed(); } else//if(ack == NACK) { MNACK_StandardSpeed(); } } return res; }
//连续发送 void AT21CS01_SendData(u8* data, u16 len) { while(len--) { AT21CS01_SendByte(*data); data++; } } //连续接收 void AT21CS01_ReadData(u8* buffer, u16 len) { int i = 0; for( ; i < len - 1; i++) { buffer[i] = AT21CS01_ReadByte(ACK); } buffer[i] = AT21CS01_ReadByte(NACK); }
void EEPROMRead(u8* buffer, u8 addr, u8 len) { DELAY_HTSS(); AT21CS01_SendByte(EEPROM_ACCESS | WRITE);//dummy write AT21CS01_SendByte(addr); delay_us(800); AT21CS01_SendByte(EEPROM_ACCESS | READ); AT21CS01_ReadData(buffer, len); DELAY_HTSS(); }
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
85
999
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号