AVR单片机读写CPLD

来源:本站
导读:目前正在解读《AVR单片机读写CPLD》的相关信息,《AVR单片机读写CPLD》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《AVR单片机读写CPLD》的详细说明。
简介:AVR单片机读写CPLD

项目中需要使用CPLD完成一部分算法设计,参数由AVR给出,因此需要完成AVR和CPLD的通信。因此写了一个测试程序。CPLD挂在AVR的数据和地址总线上,AVR使用ATmega128,在CPLD中设置几个寄存器,通过AVR读写寄存器来实现两者之间的通信。

Mega128的外部存储空间从0X1100开始,因此只需要配置相应的寄存器后读取或者写入相应的地址就可以,程序比较简单,注释中都有说明,仅供参考。

view plaincopy to clipboardprint?/*******************************************************************名称:mian.c功能:测试AVR与CPLD的通信,将数据写入CPLD中配置的寄存器,然后读出,通过串口输出做比较作者:emouse时间:2011.1.4版本:1.0注意:无********************************************************************/#include"avr/io.h"#include"avr/interrupt.h"#include"util/delay.h"#defineSetBit(Port,N)(Port|=(1<<N))//设置IO某一位#defineClrBit(Port,N)(Port&=~(1<<N))//清空IO某一位#defineReverBit(Port,N)(Port^=(1<<N))//取反IO某一位#defineGetBit(Pin,N)((Pin>>N)&0x01)//读取IO某一位unsignedchardata;voidXRAM_example(void){unsignedchar*q=0x1100;//寄存器1unsignedchar*m=0x1101;//寄存器2unsignedchar*p=0x1102;//寄存器3PORTD=0XFF;DDRD=0XFF;DDRC=0xFF;//默认情况下端口C用做高地址,可以每只寄存器把端口C释放PORTC=0x00;*q=0xCC;//向寄存器1中写入数据,CPLD中自动将寄存器1的值付给寄存器3data=*p;//独处寄存器3中的值,在循环中用串口输出}voidUSART0_Init(void){UCSR0A=0x20;//波特率不加倍,单机通信模式UCSR0B=0x18;//中断不使能,允许发送和接收UCSR0C=0x06;//异步模式,无校验,8位数据,1位停止位UBRR0H=0x00;UBRR0L=51;//9600波特率晶振8M}voidUSART0_SendByte(unsignedchardata){while(!(UCSR0A&(1<<UDRE0)));//等待发送缓冲空UDR0=data;//发送数据}intmain(void){unsignedchari=0;USART0_Init();//初始化USART0接口MCUCR=0xC0;//使能外部SRAMXMCRA=0x00;DDRA=0XFF;PORTA=0XFF;DDRE=0xff;DDRD=0xff;PORTD=0x00;//使能CSA16A17=11USART0_SendByte(0x88);while(1){ReverBit(PORTA,0);XRAM_example();_delay_ms(500);USART0_SendByte(data);}}

提醒:《AVR单片机读写CPLD》最后刷新时间 2024-03-14 01:13:41,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《AVR单片机读写CPLD》该内容的真实性请自行鉴别。