|
Кто работал с ADV212 |
|
|
|
Oct 13 2014, 15:59
|
Профессионал
    
Группа: Свой
Сообщений: 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 не требуют клока вообще. Мысль только менять чип, охота услышать мнение специалиста, работавшего с этим чипом.
|
|
|
|
|
 |
Ответов
|
Apr 27 2017, 11:03
|
Группа: Новичок
Сообщений: 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
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|