世界足球俱乐部杯

登录 免费注册 世界足球俱乐部杯 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

[求助]请教我AVR的I/O端口设置的源程序对不对?附代码....

作者:42103632 栏目:单片机
小弟用GCC写了一个ATMEGA64的I/O端口设置程序,主要想外扩512K RAM,和3个FLASH存储器,设置了片选信号.保存串口传过来的
数据(串口正常工作).外部RAM用堆的方式来使用.可是串口无法发送出数据,想请教一下我的I/O端口设置问题在哪?代码如下:
/*******************************************************
函数: 串口初始化
功能:波特率:19200,晶震:6.25M,双串口*******************************************************/
void uart_init(void)//(unsigned int baud)
{  
//UART0 Init:
   UCSR0C=0x06;//|=(~(1<<UMSEL0))|(1<<UCSZ01)|(1<<UCSZ00);  //异步模式,8位数据+1位停止位
   UCSR0B=0x00 ;                                  //设置波特率时候关闭UART
   UBRR0H=0x00 ;                                  
   UBRR0L=0x13 ;  
   UCSR0A=0x20;
   UCSR0B|=(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0)|(1<<TXCIE0);      //允许发送和接收
  
//UART1 Init:
   UCSR1C=0x06;  
   UCSR1B=0x00;
   UBRR1H=0x00;
   UBRR1L=0x13;
   UCSR1A=0x20;
   UCSR1B|=(1<<RXEN1)|(1<<TXEN1)|(1<<RXCIE1)|(1<<TXCIE1);//|(1<<UDRIE1);
  
  
  sei();                                      //开中断
  }
/********************************************************************
函数:系统初始化
功能:外扩SRAM512K),设置相关控制位,外部RAM使能,使用PA,PC口地址
       数据线复用,同时扩展PF0,PF1,PF2三口为地址线
      使寻址能力达512K,同时系统外接3片FLASH存储器,
      分别用PF3,PF4,PF5,PF6做为片选信号。
********************************************************************/
  void system_init(void)
  {
      MCUCR|=(1<<SRE)|(~(1<<SE));                       //外部SRAM使能
     cbi(SFIOR,PUD);  //上拉电阻使能位
    //cbi(MCUCR,SE); //禁止使能睡眠方式 SE is flag sleep
     XMCRA=0x00;                           //外部存储器控制器寄存器A
     XMCRB=0x00;                           //外部存储器控制器寄存器B
     DDRA=0xFF;                             //I/O端口A,C,F 初始化
     PORTA=0xFF;
     DDRC=0xFF;
     PORTC=0x7F;   //默认A15(PC7)为零,使用低地地址空间(32K)
     DDRF=0xFF;  //扩展PF0,PF1,PF2口为地址线,同时,使用PF3,PF4,PF5,PF6为FLASH存储器的片选信号
     PORTF|=0x08;  //默认使用外部SRAM,对应片选信号为PF3=1,PF4=0,PF5=0,PF6=0,PF7默认为0。
     /*//其他口上拉电阻使能
     DDRB=0;PORTB=0xFF;
     DDRD=0;PORTD=0xFF;
     DDRE=0;PORTE=0xFF;
     DDRG=0;PORTG=0xFF;*/
     //堆设置
     __malloc_heap_start=(unsigned CHAR *)0x1100;
     __malloc_heap_end=(unsigned CHAR *)0x90FF;
    }

初始化函数里面设置完成后,在程序中采用
unsigned CHAR *data=(unsigned CHAR *)malloc(100);
memset(data,0,100);//使用前先初始化空间.
memcpy(data,string,100);  //string数组已知.
.....
free(data);//释放空间
data=NULL;//指针指向NULL;

上面这些是我查到的最安全的使用方法了,可是,调试时发现,问题出在从memcpy(data,string,100); 以下的根本无
法执行下去.请教高手了!!!!期待中.

参与讨论
昵称:
讨论内容:
 
 
相关帖子
请问有没有给初学者用的51实验板套件?要带液晶屏的!...
求教继电器驱动能力的问题[ 新手:)]
问题问题问题问题
学汇编疑问
[注意]嵌入式系统研讨会  邀请函


Copyright © 1998-2006 domainnameq.cn 浙ICP证030469号