历史上的今天
今天是:2024年12月20日(星期五)
2019年12月20日 | AVR单片机与CPLD的通信设计
2019-12-20 来源:elecfans
项目中需要使用CPLD完成一部分算法设计,参数由AVR给出,因此需要完成AVR和CPLD的通信。因此写了一个测试程序。CPLD挂在AVR的数据和地址总线上,AVR使用ATmega128,在CPLD中设置几个寄存器,通过AVR读写寄存器来实现两者之间的通信。
Mega128的外部存储空间从0X1100开始,因此只需要配置相应的寄存器后读取或者写入相应的地址就可以,程序比较简单,注释中都有说明,仅供参考。
功能:测试AVR与CPLD的通信,将数据写入CPLD中配置的寄存器,然后读出,通过串口输出做比较。

/#include“avr/io.h”
#include“avr/interrupt.h”
#include“util/delay.h”
#defineSetBit(Port,N)(Port|=(1《
#defineClrBit(Port,N)(Port&=~(1《
#defineReverBit(Port,N)(Port^=(1《
#defineGetBit(Pin,N)((Pin》》N)&0x01)//读取IO某一位
unsignedchardata;
voidXRAM_example(void)
{
unsignedchar*q=0x1100;//寄存器1
unsignedchar*m=0x1101;//寄存器2
unsignedchar*p=0x1102;//寄存器3
PORTD=0XFF;
DDRD=0XFF;
DDRC=0xFF;//默认情况下端口C用做高地址,可以每只寄存器把端口C释放
PORTC=0x00;
*q=0xCC;//向寄存器1中写入数据,CPLD中自动将寄存器1的值付给寄存器3
data=*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《
UDR0=data;//发送数据
}
intmain(void)
{
unsignedchari=0;
USART0_Init();//初始化USART0接口
MCUCR=0xC0;//使能外部SRAM
XMCRA=0x00;
DDRA=0XFF;
PORTA=0XFF;
DDRE=0xff;
DDRD=0xff;
PORTD=0x00;//使能CSA16A17=11
USART0_SendByte(0x88);
while(1)
{
ReverBit(PORTA,0);
XRAM_example();
_delay_ms(500);
USART0_SendByte(data);
}
}
史海拾趣
|
我用TINA_TI直流/交流仿真时出现“TINA7仿真出现“Circuit must contain at least one IC”的对话框怎么办?为什么会这样… 查看全部问答> |
|
博世安防技术现身知名的莫斯科大剧院 慧聪安防网讯 当著名的莫斯科大剧院于2005年至2011年期间进行整修时,博世被指派开发和 安装最先进的安防系统,包括防火、广播、疏散和视频监控技术。新的系统不仅要提供全面的、可 共同操作的网络,而且还 ...… 查看全部问答> |
|
SAM4L Xplained Pro starter kit之库函数实现usart串口 串口,这个对于大家学过MCU的人来说,都不陌生。在ATSAM4L这个系列的单片机上的串口是。普通MCU的串口是是通用异步收发器,简称UART,全称是Universal Asynchronous Receiver/Transmitter,而在ATSAM4L单片机中的串口是 ...… 查看全部问答> |
|
做了一个简单的麦克风前置放大,用的是分立元件三极管,第一级共射放大,第二级共集,咪头拾取到的输入信号与经三极管放大后的输出信号电压相位是相反的,相差180度,这样出来的声音和原始声音会不会差别很大。 … 查看全部问答> |




