81
955
2831
初级工程师
5059563873ca0dee89.png (44.35 KB )
下载附件
2022-11-30 19:21 上传
使用特权
2596763873d04131dd.png (34.51 KB )
2022-11-30 19:22 上传
604663873d0c4cbdd.png (60.2 KB )
4200763873d44daed1.png (42.08 KB )
2022-11-30 19:23 上传
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 }
1651063873e416ce0c.png (26.62 KB )
2022-11-30 19:28 上传
2845963873ea0abcda.png (25.77 KB )
2022-11-30 19:29 上传
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; }
9942663873f78d2127.png (43 KB )
2022-11-30 19:33 上传
2259663873f8698f2c.png (35.98 KB )
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); }
43336638741a5512dd.png (60.07 KB )
2022-11-30 19:42 上传
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(); }
827496387426abe0aa.png (45.38 KB )
2022-11-30 19:45 上传
发表回复 本版积分规则 回帖后跳转到最后一页
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注21ic项目外包
扫码关注21ic视频号
扫码关注21ic抖音号
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才 | 论坛帮助
京公网安备 11010802024343号