131 1300 0010
其他
当前位置: 首页>> 元件技术>>其他>>
  • 导航栏目
  • 二极管
  • 整流桥
  • MOS管
  • 其他
  • AVR单片机与CPLD的通信设计
    AVR单片机与CPLD的通信设计
  • AVR单片机与CPLD的通信设计
  •   发布日期: 2019-06-03  浏览次数: 1,134

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

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

     

    功能:测试AVR与CPLD的通信,将数据写入CPLD中配置的寄存器,然后读出,通过串口输出做比较。


    AVR单片机与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);

    }

    }


  • ·上一篇:
    ·下一篇:
  • 其他关联资讯
    深圳市日月辰科技有限公司
    地址:深圳市宝安区松岗镇潭头第二工业城A区27栋3楼
    电话:0755-2955 6626
    传真:0755-2978 1585
    手机:131 1300 0010
    邮箱:hu@szryc.com

    深圳市日月辰科技有限公司 版权所有:Copyright©2010-2023 www.szryc.com 电话:13113000010 粤ICP备2021111333号