реклама на сайте
подробности

 
 
> Кто работал с ADV212
alexPec
сообщение Oct 13 2014, 15:59
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Добрый день всем. Спаяли железо с ADV212, начинаю запускать. Сразу беда - не читаются прямо адресуемые регистры. Точнее читаются, но не те значения что я пишу.

Сигналы подаю по даташиту, дожидаюсь АСК от чипа (он приходит).

Делаю так:

1.Подаю питание (в норме, проверял)
2.Подаю клок 20МГц на МCLK
3.Подаю отрицательный импульс на reset
4.По адресу (прямому) 0xF пишу число 4
5.По адресу (прямому) 0xЕ пишу число 8
6.Читаю адрес 0xE - получаю 0x8B
7.Читаю адрес 0xF - получаю 0xB.

Клок померял прямо на шарике ADV212 - 20МГЦ приходит.
Сигналы RD, WR,CS - думаю тоже нормально доходят, поскольку ACK от чипа приходит и на чтение, и на запись.
Данные и адреса (он идут с ПЛИС) смотрел сигнал-тапом, все в норме.

При чтении регистров (прямых) всех кроме BUSMODE, MMODE, PLL_HI, PLL_LO ACK от чипа не приходит.

Кто что может посоветовать, что еще проверить? Похоже не запускается PLL внутренняя, есть там какие-то хитрости? Хотя написано, что регистры BUSMODE, MMODE, PLL_HI, PLL_LO не требуют клока вообще.
Мысль только менять чип, охота услышать мнение специалиста, работавшего с этим чипом.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
russmakse
сообщение Apr 27 2017, 11:03
Сообщение #2





Группа: Новичок
Сообщений: 3
Регистрация: 27-04-17
Пользователь №: 96 767



не могу прочитать данные из региста IDATA косвенной адресации, возможно есть ошибки в коде, не могли бы вы мне помочь?регистр SWFLAG 000000 флаг аппаратного прерывания IERQFLG 0х040F, ACK - приходит
Код
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include "define.h"

void USART_Init( unsigned int baud )
{
UCSR1A = (1<<U2X1);
// Установка скорости связи
uint16_t b=0;
b = (uint16_t)((F_CPU/(16 * baud))-1);
UBRR1H = 0; //(uint8_t)((b>>8)&0x000F);
UBRR1L = (uint8_t)b;
// Разрешение работы передатчика и приемника, разрешение прерывания по приходу байта
UCSR1B = (1<<RXEN1)|(1<<TXEN1);
// Установка формата посылки: 8 бит данных, 2 стоп-бита
UCSR1C = (1<<UCSZ11)|(1<<UCSZ10)|(1<<USBS1);
}

void USART_Transmit( unsigned char data )
{
/* Ожидание освобождения буфера передатчика  */
while ( !( UCSR1A & (1<<UDRE1)) );
/* Помещение данных в буфер, отправка данных */
UDR1 = data;
}

unsigned char USART_Receive( void )
{
// Ожидание окончания приема данных
while ( !(UCSR1A & (1<<RXC1)) );
// Загрузка принятых данных из буфера
return UDR1;
}

int main(void)
{
    USART_Init(9600);
    DDRD|=(1<<3); //PD3 = UART_TXD
    DDRD&=~(1<<2); //PD2 = UART_RXD
    DDRG = 0xFF; // Direct address - output
    DDRB = 0b11110111; // cs,we,rd,reset,irq,PB6,PB7 - output; ack - input
    CS_1; WE_1; RD_1; RESET_1; IRQ_1;
    HDATOUT;
    unsigned long iadd = 0x00050000;
    unsigned long idata;
    unsigned char irqflag,i=0;
    unsigned long parametr[15] = {0x00000010,0x00000002,0x00000002,0x00000003,0x00000003,0x00000000,0x00000000,0x
00000000,
                                  0x00000001,0x00000040,0x00000000,0x00000000,0x00000040,0x00000001,0x0000000
2};
    RESET_0;
    _delay_us(20);
    RESET_1;
    _delay_us(20);
    
//    PRE - Initialization      //
    DIRRECT_REG(PLL_HI);
    HDATA_0_7(0x08);
    CS_0; WE_0;
    _delay_us(10);
    WE_1;CS_1;
    _delay_us(20);
    
    DIRRECT_REG(PLL_LO);
    HDATA_0_7(0x04);
    CS_0; WE_0;
    _delay_us(10);
    WE_1;CS_1;
    _delay_us(20);
    
    DIRRECT_REG(BOOT);
    HDATA_0_7(0x8A);
    CS_0; WE_0;
    _delay_us(10);
    WE_1;CS_1;
    _delay_us(1000);
    
    DIRRECT_REG(BMODE);
    HDATA_0_7(0x0A);
    CS_0; WE_0;
    _delay_us(10);
    WE_1;CS_1;
    _delay_us(1000);
    
    DIRRECT_REG(MMODE);
    HDATA_0_7(0x0A);
    CS_0; WE_0;
    _delay_us(10);
    WE_1;CS_1;
    _delay_us(1000);
    
//        Load FIRMWARE       //
    USART_Transmit('R');
    USART_Transmit('e');
    USART_Transmit('a');
    USART_Transmit('d');
    USART_Transmit('y');
    USART_Transmit('!');
    while(!(UCSR1A & (1<<RXC1)));
    for(iadd = 0x00050000;iadd <= 0x00051FFF;iadd++)
        {
        DIRRECT_REG(IADDR);
        HDATA_0_7(iadd);
        HDATA_8_15(iadd >> 8);
        HDATA_16_23(iadd >> 16);
        HDATA_24_31(iadd >> 24);
        CS_0; WE_0;
        _delay_us(10);
        WE_1;CS_1;
        _delay_us(1000);
        
        DIRRECT_REG(IDATA);
        HDATA_0_7(USART_Receive());
        HDATA_8_15(USART_Receive());
        HDATA_16_23(USART_Receive());
        HDATA_24_31(USART_Receive());
        CS_0; WE_0;
        _delay_us(10);
        WE_1;CS_1;
        _delay_us(1000);
        }            
//      Cheek    Firmware           //
        for(
        iadd = 0x00050000;iadd <= 0x00051FFF;iadd++)
        {
        HDATOUT;
        DIRRECT_REG(IADDR);
        HDATA_0_7(iadd);
        HDATA_8_15(iadd >> 8);
        HDATA_16_23(iadd >> 16);
        HDATA_24_31(iadd >> 24);
        CS_0; WE_0;
        _delay_us(10);
        WE_1;CS_1;
        _delay_us(1000);
        HDATIN;
        DIRRECT_REG(IDATA);
        CS_0; RD_0;
        _delay_us(10);
        RD_1;CS_1;
        _delay_us(1000);
        }    
            
//    POST - Initialization   //

    HDATOUT;
    DIRRECT_REG(BOOT);
    HDATA_0_7(0x8D);
    CS_0; WE_0;
    _delay_us(10);
    WE_1;CS_1;
    _delay_us(1000);
    
    DIRRECT_REG(BMODE);
    HDATA_0_7(0x0A);
    CS_0; WE_0;
    _delay_us(10);
    WE_1;CS_1;
    _delay_us(1000);
    
    DIRRECT_REG(MMODE);
    HDATA_0_7(0x0A);
    CS_0; WE_0;
    _delay_us(10);
    WE_1;CS_1;
    _delay_us(1000);
    
//         Set Parameter          //
    for(iadd = 0x00057F00;iadd <= 0x00057F0F;iadd++)
        {
        DIRRECT_REG(IADDR);
        HDATA_0_7(iadd);
        HDATA_8_15(iadd >> 8);
        HDATA_16_23(iadd >> 16);
        HDATA_24_31(iadd >> 24);
        CS_0; WE_0;
        _delay_us(10);
        WE_1;CS_1;
        _delay_us(1000);
        DIRRECT_REG(IDATA);
        idata = parametr[i];
        HDATA_0_7(idata);
        HDATA_8_15(idata>>8);
        HDATA_16_23(idata>>16);
        HDATA_24_31(idata>>24);
        CS_0; WE_0;
        _delay_us(10);
        WE_1;CS_1;
        _delay_us(1000);
        i++;
        }
    
    DIRRECT_REG(EIRQIE);
    HDATA_0_7(0x00);
    HDATA_8_15(0x04);
    CS_0; WE_0;
    _delay_us(10);
    WE_1;CS_1;
    _delay_us(1000);
    
//               Hardware Interrupt           //
    IRQ_0;
    _delay_us(100);
    IRQ_1;
    
    HDATIN;
    
    while(!(irqflag==0x04))
    {
                DIRRECT_REG(EIRQFLG);
                CS_0;RD_0;
                _delay_us(10);
                irqflag = PORTF;
                RD_1;CS_1;
                _delay_ms(1000);
    }                
    while(1){
                DIRRECT_REG(SWFLAG);
                CS_0;RD_0;
                _delay_us(10);
                RD_1;CS_1;
                _delay_ms(1000);
                
            }

}

Код
#ifndef DEFINE_H_
#define DEFINE_H_

#define CS 0
#define WE 1
#define RD 2
#define ACK 3
#define IRQ 4
#define RESET 5

#define CS_1 PORTB|=(1<<CS)
#define CS_0 PORTB&=~(1<<CS)
#define WE_1 PORTB|=(1<<WE)
#define WE_0 PORTB&=~(1<<WE)
#define RD_1 PORTB|=(1<<RD)
#define RD_0 PORTB&=~(1<<RD)
#define IRQ_1 PORTB|=(1<<IRQ)
#define IRQ_0 PORTB&=~(1<<IRQ)
#define RESET_1 PORTB|=(1<<RESET)
#define RESET_0 PORTB&=~(1<<RESET)

#define HDATOUT DDRE = 0xFF; DDRF = 0xFF; DDRA = 0xFF; DDRC = 0xFF
#define HDATIN DDRE = 0x00; DDRF = 0x00; DDRA = 0x00; DDRC = 0x00
#define HDATA_0_7(x) PORTE = x
#define HDATA_8_15(x) PORTF = x
#define HDATA_16_23(x) PORTA = x
#define HDATA_24_31(x) PORTC = x
#define DIRRECT_REG(x) PORTG = x

/*   Direct register memory map   */
#define PIXEL 0x00  // PIXEL FIFO Access Register
#define CODE  0x01  // Compressed Code-Stream Access Register
#define ATTR  0x02  // ATTR FIFO Access Register
/* Reserved address 0x03 and 0x04  */
#define EIRQIE 0x05 // External Interrupt Enabled
#define EIRQFLG 0x06 // External Interrupt Flags
#define SWFLAG 0x07 // Software Flag Register (Read Only)
#define BMODE 0x08 // Bus Mode Configuration Register
#define MMODE 0x09 // Miscellaneous Mode Register
#define STAGE 0x0A // Staging Register
#define IADDR 0x0B // Indirect Address Register
#define IDATA 0x0C // Indirect Data Register
#define BOOT 0x0D  // Boot Mode Register
#define PLL_HI 0x0E // PLL Control Register - High Byte
#define PLL_LO 0x0F // PLL Control Register - Low Byte

#endif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- alexPec   Кто работал с ADV212   Oct 13 2014, 15:59
- - Alex11   Странно это. Чип, конечно, кривенький, но не в это...   Oct 13 2014, 16:32
|- - alexPec   Цитата(Alex11 @ Oct 13 2014, 20:32) Стран...   Oct 14 2014, 07:03
- - Alex11   А длительности при этом достаточные? Там они опред...   Oct 14 2014, 16:16
|- - alexPec   Цитата(Alex11 @ Oct 14 2014, 20:16) А дли...   Oct 14 2014, 20:58
|- - alexPec   А что чип делает, если уставки размера картики (ак...   Oct 23 2014, 09:50
- - Alex11   Я не пытался ставить ему кривые параметры, он и пр...   Oct 24 2014, 18:03
|- - alexPec   Цитата(Alex11 @ Oct 24 2014, 22:03) Я не ...   Oct 25 2014, 11:13
- - Golikov A.   10 бит дает 1024 уровня 8 бит дает 256 уровней что...   Oct 25 2014, 14:44
|- - alexPec   Цитата(Golikov A. @ Oct 25 2014, 18:44) 1...   Oct 25 2014, 18:09
- - Alex11   Вот теперь и Вы добрались до глюкавых мест. Вы счи...   Oct 26 2014, 20:47
|- - alexPec   Спасибо за код. А можете показать кусок где запуск...   Oct 27 2014, 09:07
- - Alex11   Там дальше в запуске уже все специфично для нашего...   Oct 27 2014, 09:41
|- - alexPec   Цитата(Alex11 @ Oct 27 2014, 12:41) Там д...   Oct 27 2014, 11:36
- - Alex11   Да, источник пикселов. Я подаю через VData. Про ...   Oct 30 2014, 17:00
|- - alexPec   Цитата(Alex11 @ Oct 30 2014, 21:00) Про ...   Nov 2 2014, 19:31
- - russmakse   RE: Кто работал с ADV212   Apr 27 2017, 14:25
- - Alex11   Вы уж меня извините, но я не готов разбираться с В...   Apr 27 2017, 21:41
- - russmakse   Как считать значение любого из внутренних регистро...   Apr 28 2017, 09:15
|- - alexPec   Цитата(russmakse @ Apr 28 2017, 13:15) Ка...   Apr 28 2017, 21:18
- - Alex11   Начните с простого - не меняйте PLL, а прочитайте ...   Apr 29 2017, 12:14


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th August 2025 - 04:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016