历史上的今天
今天是:2024年11月07日(星期四)
2019年11月07日 | AVR单片机的TWI中断模式
2019-11-07 来源:51hei
使用AVR单片机内部的TWI功能,并采用中断工作模式,可以很好的使用Atmega系列的内部资源,并提高程序的稳定性;
#include unsigned char i2c_sla; unsigned char i2c_addrh,i2c_addrl; unsigned char i2c_wr; unsigned char i2c_sub_flag; unsigned char i2c_num; unsigned char *i2c_buf; unsigned char i2c_end; /*********************************************************************************************************************************************************************** 函数名称:interrupt [TWI] void twi_isr(void) 函数功能:i2c底层中断处理函数(时钟SD2201和AT24C256共同的) ***********************************************************************************************************************************************************************/ interrupt [TWI] void twi_isr(void) { unsigned char i2c_sta,tmp = 0; i2c_sta = TWSR; switch(i2c_sta) { case 0x08: if(i2c_sub_flag == 1) { TWDR = i2c_sla&0xfe; } else { TWDR = i2c_sla; } //TWCR &= 0xcf; //TWCR |= 0x80; TWCR = 0x85; break; case 0x10: TWDR = i2c_sla; //TWCR &= 0xcf; //TWCR |= 0x80; TWCR = 0x85; //i2c_sub_flag = 1; break; case 0x18: if(i2c_sub_flag == 0) { if(i2c_num > 0) { TWDR = *i2c_buf; //TWCR &= 0xcf; //TWCR |= 0x80; TWCR = 0x85; i2c_buf++; i2c_num--; } else { //TWCR &= 0xdf; //TWCR |= 0x90; TWCR = 0x95; i2c_end = 1; } } if(i2c_sub_flag == 1) { TWDR = i2c_addrh; //TWCR &= 0xcf; //TWCR |= 0x80; TWCR = 0x85; i2c_sub_flag = 2; } break; case 0x28: if(i2c_sub_flag == 3) { if(i2c_wr == 0) { if(i2c_num > 0) { TWDR = *i2c_buf; i2c_buf++; //TWCR &= 0xcf; //TWCR |= 0x80; TWCR = 0x85; i2c_num--; } else { //TWCR &= 0xdf; //TWCR |= 0x90; TWCR = 0x95; i2c_end = 1; } } } if(i2c_sub_flag == 2) { TWDR = i2c_addrl; //TWCR &= 0xcf; //TWCR |= 0x80; TWCR = 0x85; i2c_sub_flag = 3; } if(i2c_sub_flag == 3) { if(i2c_wr == 1) { //TWCR &= 0xef; //TWCR |= 0xa0; TWCR = 0xa5; } } if(i2c_sub_flag == 0) { if(i2c_num > 0) { TWDR = *i2c_buf; //TWCR &= 0xcf;
史海拾趣
|
如果同时掌握了arm和cpld会不会有所帮助? 来自EEWORLD合作群:arm linux fpga 嵌入0(49900581)群主:wangkj… 查看全部问答> |
|
能够记录机器里面播放的声音,或者使用麦克可以录音,但就是不能同时实现卡拉ok混音功能。怎么办,网上找到的补丁都用过了,就是不能用混音。 高手在哪里?… 查看全部问答> |
|
我的是一个协议层驱动,有个疑问就是 A.使用CreateService,OpenService,QueryServiceStatus及StartService等一系列API安装起来的驱动 B.使用Inf文件及INetCfg的COM接口安装的驱动 问题是 1.这两种方式有什么不同? 2.为什么A安装后\"本地连接\" ...… 查看全部问答> |
|
我现在做图片解码显示,用的是ze的片子,我开辟了的一个大的数组在sram里,请放心这个数组确实在外部,我去过地址查看,0x6800xxx位置,现在的问题是,我如果把这个数组开辟的小一点,比如几百字节,lcd显示正常,开辟大来人比如几百k &n ...… 查看全部问答> |
|
开关电源组件选择 开关电源组件选择 (Switch-Power-Supply-Component-Selection) 开关电源深入浅出之设计选型篇,作为能量转换的装置-电源,此篇告诉你想了解的储能元器件类型和如何选择,理解并能优化选择电容和电感 课程大纲: 拓扑敏感回路 ...… 查看全部问答> |




