Перейти к содержанию
    

russmakse

Новичок
  • Постов

    3
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Как считать значение любого из внутренних регистров желательно знать задержки между обращениями Вот например Подаю MCLK POWER записываю регистр PLLLO PLLHI 0x04, 0x08 соответственно BOOT записываю в регистр 0x08A режим no-boot, программный сброс BMODE записываю 0x0A, режим 32 битной шины MMODE записываю 0x0E, режим без авто инкремента адреса в программе циклически читаю значение внутреннего регистра XTOT значение которого по дефолту 0х064B в итоге нули хотя ACK всегда приходит
  2. не могу прочитать данные из региста 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
×
×
  • Создать...