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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Кто работал с ADV212
alexPec
сообщение Nov 2 2014, 19:31
Сообщение #16


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

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



Цитата(Alex11 @ Oct 30 2014, 21:00) *
Про "висит". У меня при инициализации после заливки и проверки прошивки идет сброс, после которого должно появиться прерывание. Довольно часто его нет. Если данные на вход заранее не подать, то его не будет никогда.


Прерывание по трешхолду code fifo?
Go to the top of the page
 
+Quote Post
russmakse
сообщение Apr 27 2017, 11:03
Сообщение #17





Группа: Новичок
Сообщений: 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
russmakse
сообщение Apr 27 2017, 14:25
Сообщение #18





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



Прикрепленное изображение
Go to the top of the page
 
+Quote Post
Alex11
сообщение Apr 27 2017, 21:41
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Вы уж меня извините, но я не готов разбираться с Вашими тремя страницами кода, тем более, что программист, который это писал, уволился уже года три как. Если будет конкретный вопрос, попробую подсказать, но мы эту деталь не используем давно.
Go to the top of the page
 
+Quote Post
russmakse
сообщение Apr 28 2017, 09:15
Сообщение #20





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



Как считать значение любого из внутренних регистров желательно знать задержки между обращениями
Вот например
Подаю MCLK POWER
записываю регистр PLLLO PLLHI 0x04, 0x08 соответственно
BOOT записываю в регистр 0x08A режим no-boot, программный сброс
BMODE записываю 0x0A, режим 32 битной шины
MMODE записываю 0x0E, режим без авто инкремента адреса

в программе циклически читаю значение внутреннего регистра XTOT значение которого по дефолту 0х064B

в итоге нули хотя ACK всегда приходит
Go to the top of the page
 
+Quote Post
alexPec
сообщение Apr 28 2017, 21:18
Сообщение #21


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

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



Цитата(russmakse @ Apr 28 2017, 13:15) *
Как считать значение любого из внутренних регистров желательно знать задержки между обращениями
Вот например
Подаю MCLK POWER
записываю регистр PLLLO PLLHI 0x04, 0x08 соответственно
BOOT записываю в регистр 0x08A режим no-boot, программный сброс
BMODE записываю 0x0A, режим 32 битной шины
MMODE записываю 0x0E, режим без авто инкремента адреса

в программе циклически читаю значение внутреннего регистра XTOT значение которого по дефолту 0х064B

в итоге нули хотя ACK всегда приходит


Для начала посмотрите, все ли что вы записываете действительно записалось - попробуйте прочитать записанные регистры. Сначала прямые, потом косвенные.
Кстати, в моем случае глюки с чтением регистров были связаны с качеством питания 1.5В. Пока не обвесил конденсаторами все ноги 1,5В - внутренняя память регистровая сбоила. Я с 32бит шиной не пробовал, у меня была 16 бит шина. Для выходного потока - JDATA.
Go to the top of the page
 
+Quote Post
Alex11
сообщение Apr 29 2017, 12:14
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Начните с простого - не меняйте PLL, а прочитайте дефолтные значения прямых регистров, дальше поменяйте PLL и сделайте это еще раз, только потом переходите к косвенным. И посмотрите на все рекомендации из предыдущего поста - они справедливы. Плюс еще качество клока - должен быть аккуратный, без звона, особенно в районе половины амплитуды.
Go to the top of the page
 
+Quote Post

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

 


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


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