项目中需要使用CPLD完成一部分算法设计,参数由AVR给出,因此需要完成AVR和CPLD的通信。因此写了一个测试程序。CPLD挂在AVR的数据和地址总线上,AVR使用ATmega128,在CPLD中设置几个寄存器,通过AVR读写寄存器来实现两者之间的通信。
Mega128的外部存储空间从0X1100开始,因此只需要配置相应的寄存器后读取或者写入相应的地址就可以,程序比较简单,注释中都有说明,仅供参考。
view plaincopy to clipboardprint?
#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某一位
unsigned
chardata;
voidXRAM_example(
void)
{
unsigned
char*q=0x1100;
unsigned
char*m=0x1101;
unsigned
char*p=0x1102;
PORTD=0XFF;
DDRD=0XFF;
DDRC=0xFF;
PORTC=0x00;
*q=0xCC;
data=*p;
}
voidUSART0_Init(
void)
{
UCSR0A=0x20;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=51;
}
voidUSART0_SendByte(unsigned
chardata)
{
while(!(UCSR0A&(1<<UDRE0)));
UDR0=data;
}
intmain(
void)
{
unsigned
chari=0;
USART0_Init();
MCUCR=0xC0;
XMCRA=0x00;
DDRA=0XFF;
PORTA=0XFF;
DDRE=0xff;
DDRD=0xff;
PORTD=0x00;
USART0_SendByte(0x88);
while(1)
{
ReverBit(PORTA,0);
XRAM_example();
_delay_ms(500);
USART0_SendByte(data);
}
}