Hello all,
I want to write 128byte to AT24C512 on Page0
but after writing about 30 byte the program stop and this is repeating constantly.
I guess probably one Interrupt is cause of the problem
can every body help me?
my compiler is CodeVision 14.3
void twic_init(void) { // General TWIC initialization // External Driver Interface: Off // SDA Hold: Off twi_init(&TWIC,false,TWI_SDAHOLD_OFF_gc); // TWIC Master initialization // Master interrupt: High Level // Peripheral Clock frequency: 2000000 Hz // SCL Rate: 100000 bps // Real SCL Rate: 100000 bps, Error: 0.0 % twi_master_init(&twic_master,&TWIC,TWI_MASTER_INTLVL_HI_gc, TWI_BAUD_REG(2000000,200000)); // TWIC Slave is disabled TWIC.SLAVE.CTRLA=0; } // TWIC Master interrupt service routine #pragma optsize- // optimize for speed interrupt [TWIC_TWIM_vect] void twic_master_isr(void) { twi_master_int_handler(&twic_master); //PORTB_OUTTGL=0b000000010; //delay_ms(20); } #pragma optsize_default #define EEPROM_TWI_BUS_ADDRESS (0b01010010 >> 0) //#define EEPROM_TWI_BUS_ADDRESS (0b1101000 >> 0) unsigned char eeprom_rd_data,page_number=0,temp_page=0,i=0; struct { struct { unsigned char msb; unsigned char lsb; } addr; unsigned char data[128]; } twi_eeprom; void main(void){ { // Declare your local variables here unsigned char n; // Interrupt system initialization // Optimize for speed #pragma optsize- // Make sure the interrupts are disabled #asm("cli") // Low level interrupt: Off // Round-robin scheduling for low level interrupt: Off // Medium level interrupt: Off // High level interrupt: On // The interrupt vectors will be placed at the start of the Application FLASH section n=(PMIC.CTRL & (~(PMIC_RREN_bm | PMIC_IVSEL_bm | PMIC_HILVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_LOLVLEN_bm))) | PMIC_HILVLEN_bm; CCP=CCP_IOREG_gc; PMIC.CTRL=n; // Set the default priority for round-robin scheduling PMIC.INTPRI=0x00; // Restore optimization for size if needed #pragma optsize_default // System clocks initialization system_clocks_init(); // Ports initialization ports_init(); // Virtual Ports initialization vports_init(); // TWIC initialization twic_init(); // Globally enable interrupts #asm("sei") } for(i=0;i<128;i++){ twi_eeprom.data[i]=i; PORTB_OUTTGL=0b00000100; delay_ms(20); } PORTA_OUT=0b00100000; PORTR_OUTSET=0b00000010; while (1) { PORTA_OUTTGL=0b00000001; delay_ms(20); temp_page=page_number<<6; //page start address twi_eeprom.addr.msb=(temp_page>>8); twi_eeprom.addr.lsb=(temp_page & 0x00FF); twi_master_trans(&twic_master,EEPROM_TWI_BUS_ADDRESS,(unsigned char *) &twi_eeprom,2+128,0,0); }