askme 发表于 2014-7-18 21:51:52

Mega128 sram CS连PC0地址输出的是0X1100+0X0100和之后为零的

PC0地址输出的是0X1100+0X0100和之后为零的,作为片选信号就有问题了,没有逻辑分析仪还是看不出来的,代码错在哪里了也看不出来

// XMEM Example
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
#define F_CPU 1000000
//#define F_CPU 7372800
#include <util/delay.h>
#include "xmem.h"

#define LED_BackLight PC3
#define LED_BackLight_PORT PORTC
#define LED_BackLight_DDR DDRC

void Init_port()
{
//        LED_BackLight_PORT &= ~(1<<LED_BackLight);
        DDRC |= 0xFF;
        PORTC = 0x00;
        LED_BackLight_PORT |= (1<<LED_BackLight); //PC7??0
        LED_BackLight_DDR |= (1<<LED_BackLight); //PC7????
}

#define ext_PORT1 ((volatile unsigned char *)0x1100)
#define SRAM_offset 0x1100
#define LCD_ADDRESS 0x0100


int main(void)
{
        uint8_t *mem = (uint8_t *)(SRAM_offset+LCD_ADDRESS);
        Init_port();
        XMEM_init();
        *mem = 0x55;
        XMCRB = 0x00;
        //*mem = 0x55;
        while(1)
        {
               
        }
        return 0;
}


#include <avr/io.h>
#include "xmem.h"
void XMEM_init(void)
{
        MCUCR |= (1<<SRE)|(1<<SRW10);   /* External memory interface enable */
    XMCRA |= (0<<SRL0)|(1<<SRW01)|(1<<SRW00)|(1<<SRW11);
    XMCRB |= (1<<XMM2)|(1<<XMM1)|(0<<XMM0);//PC7..PC2 released pins
}


虚地址最好改为0x2000

askme 发表于 2014-7-18 22:35:25

分区后

#define SRAM_offset 0x2000

int main(void)
{
        uint8_t *mem = (uint8_t *)(SRAM_offset);
        unsigned int i;
        Init_port();
        XMEM_init();
       
        for(i=0;i<0x200;i++)
        {
                mem = 0x55;
        }
        //*mem = 0x55;
        while(1)
        {
               
        }
        return 0;
}
页: [1]
查看完整版本: Mega128 sram CS连PC0地址输出的是0X1100+0X0100和之后为零的