Здравствуйте. Помогите разобраться. Проект пишу в IARе. Отлаживаю в AVR студии самодельным ICE. Оптимизацию кода выключил. Сделал классическую инициализацию spi в меге128 void SPI_MasterInit(void) { DDR_SPI |= (1 << DD_MOSI)|(1 << DD_SCK)|(1 << DD_SS); // Set MOSI, SCK and SS as output
SPCR |= (1 << SPE)|(1 << MSTR); // Enable SPI, Master SPSR |= (1 << SPI2X); // set clock rate fck/2 }
не могу выставить в SPSR бит SPI2X. Причем, в дизасемблере вроде все правильно (SPSR аомещается в R16 командой ldi, в R16 делается or с битом SPI2X, и затем результат назад в SPSR командой out) также этот бит не удается выставить и из панели регистров в АВР-студии(не ставятся делители которые используют бит SPI2X, остальные варианты ставятся)
и затем еще не удаётся ничего поместить в SPDR: void SPI_MasterTransmit(unsigned char cData) { SPDR = cData; /* Start transmission */ while(!(SPSR & (1<<SPIF))); /* Wait for transmission complete */ } в окошке Watch в переменной cData видны конкретные значения, после операции копирования в SPDR пусто(также, в дизасемблере никакого криминала)
В симуляторах всё работает. Причем картина не меняется даже если выключить фьюс SPI, никаких ошибок почемуто. Может кто-нибудь сталкивался?
|