欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > arm:UART(异步) IIC(同步)

arm:UART(异步) IIC(同步)

2024/10/24 21:23:34 来源:https://blog.csdn.net/weixin_71751116/article/details/141351121  浏览:    关键词:arm:UART(异步) IIC(同步)

一、UART 

UART---通用异步收发传输器
串行、异步、全双工(两个方向上同时传输,即发送和接收可以同时进行)通信协议

读一个数据初始化UART0 

4 先清零、后置位

void uart0_init(void)
{GPHCON &= ~(0xf << 4); 	//配置GPH2、3功能为RXD、TXDGPHCON |= (0xA << 4);ULCON0 &= ~(1 << 6); //普通模式ULCON0 &= ~(7 << 3); //无校验ULCON0 &= ~(1 << 2); //1位停止位ULCON0 |= ~(0x3 << 0); //数据位8位UCON0 &= ~(0x3 << 10);UCON0 |= ~(0x2 << 10); //时钟选择PCLK -- 50MUCON0 &= ~(0xf << 0);UCON0 |= ~(0x5 << 0); //中断或轮询模式UBRDIV0 = 325;//波特率 9600
}

 发送数据

 

 

void uart_send(unsigned char * data, int len)
{int i = 0;for(i = 0;i < len; i++){while(!(UTRSTAT0 & (1 << 2)));  UTXH0 = data[i];		   }
}

接收数据

unsigned char uart_recv_byte(void)
{unsigned char data = 0;while(!(UTRSTAT0 & (1 << 0)));  data = URXH0;return data;
}

主函数

int main(void)
{unsigned char data = 0;uart0_init();while(1){data = uart_recv_byte();data++;uart_send(&data,1);}	return 0;
}

其他补充

 




二、IIC 

IIC --- 集成电路总线 ;

低速、半双工(不能同时发送和接收数据,同一时刻只能有一个方向上的传输存在)、同步的串行通信总线

一般主机控制SCLK时钟线 

每次通信都由主机发起7位地址+1位读/写

 为了控制多主控 IIC 总线操作,必须写入值到以下寄存器中:
– 多主控 IIC 总线控制寄存器,IICCON
– 多主控 IIC 总线控制/状态寄存器,IICSTAT
– 多主控 IIC 总线 Tx/Rx 数据移位寄存器,IICDS
– 多主控 IIC 总线地址寄存器,IICADD

 S3C2440A的IIC总线接口有4种工作模式:
- 主机发送模式
- 主机接收模式
- 从机发送模式
- 从机接收模式

初始化IIC 

void iic_init(void)
{//配置GPE14、15引脚功能为SCL、SDAGPECON &= ~(0xf << 28);CPECON |= (0xa << 28);IICCON |= (1 << 7);	  //使能应答IICCON |= (1 << 6);	  //PCLK/512IICCON |= (1 << 5);   //允许中断IICCON &= ~(0xf << 0); 	// 预分频1
}

主机发送模式 

void iic_write(unsigned char addr, unsigned char * data, int len)
{int i = 0;IICSTAT |= (0x3 << 6);IICDS = addr;IICSTAT = 0xf0;//IICCON &= ~(1 << 4);  //清除挂起位while(!(IICCON & (1 << 4)));  //等待挂起标志for(i = 0; i < len; i++){IICDS = data[i];	IICCON &= ~(1 << 4);  //清除挂起位while(!(IICCON & (1 << 4)));  //等待挂起标志}IICSTAT = 0xd0;IICCON &= ~(1 << 4);  //清除挂起位
}

主机接收模式

int iic_read(unsigned char addr, unsigned char * data, int len)
{int i = 0;IICSTAT &= ~(0x3 << 6);IICSTAT |= (0x2 << 6);IICDS = addr;IICSTAT = 0xb0;//IICCON &= ~(1 << 4);  //清除挂起位while(!(IICCON & (1 << 4)));  //等待挂起标志for(i = 0; i < len; i++){data[i] = IICDS;	IICCON &= ~(1 << 4);  //清除挂起位while(!(IICCON & (1 << 4)));  //等待挂起标志}IICSTAT = 0x90;IICCON &= ~(1 << 4);  //清除挂起位return i;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com