SALOME 0 21 июня, 2008 Опубликовано 21 июня, 2008 · Жалоба Подскажите, плз, как сделать, чтобы при отладке программы в Кeil uVision3 данные записанные в окне отладчика SPIDAT записывались в память при пошаговой отладке? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 21 июня, 2008 Опубликовано 21 июня, 2008 · Жалоба Скорее всего нужно написать скрипт, который запустить в отладчике. По крайней мере по i2c и uart данные отлично гоняются. i2c я качнул с сайта кейла какой-то пример и подрихтовал под свои нужды. По симулятору кейла можно почитать на www.onembedding.com. Вот пример для i2c и уарт: // Simulation of I2C Memory (Slave) MAP 0x30000, 0x37FFF READ WRITE // Map User 64kB Memory region DEFINE int SADR // Slave Address signal void I2CMEMORY (void) { unsigned long adr; adr = 0x30000; while (1) { wwatch (I2C_OUT); // Wait for data from Microcontroller while (I2C_OUT == 0x0100) { // START detected wwatch (I2C_OUT); // Wait for data from Microcontroller if (I2C_OUT > 0xFF) continue; if ((I2C_OUT >> 1) != SADR) continue; // test if Slave is addressed I2C_IN = 0xFF00; // ACK to Microcontroller if (I2C_OUT & 1) { // Slave Read while (1) { I2C_IN = _RBYTE(adr); // Read Byte from Memory adr++; // Increment Address wwatch (I2C_OUT); // Wait for ACK from Microcontroller if (I2C_OUT != 0xFF00) break; } } else { // Slave Write wwatch (I2C_OUT); // Wait for data from Microcontroller if (I2C_OUT > 0xFF) continue; adr = (I2C_OUT << 8) | 0x30000; // Set Memory Address High Byte I2C_IN = 0xFF00; // ACK to Microcontroller wwatch (I2C_OUT); // Wait for data from Microcontroller if (I2C_OUT > 0xFF) continue; adr = I2C_OUT | adr; // Set Memory Address Low Byte I2C_IN = 0xFF00; // ACK to Microcontroller while (1) { wwatch (I2C_OUT); // Wait for data from Microcontroller if (I2C_OUT > 0xFF) break; _WBYTE (adr, I2C_OUT); // Store Byte in Memory adr++; // Increment Address I2C_IN = 0xFF00; // ACK to Microcontroller } } } } } SADR = 0x50 // Slave Address I2CMemory() // Starting signal function //mode com1 38400 //assign com1 <s0in>s0out SIGNAL void q (void) { // while (1) // { S0IN = 0xC0; twatch (60000); S0IN = 0x81; twatch (60000); S0IN = 0x07; twatch (60000); S0IN = 0x05; twatch (60000); S0IN = 0x06; twatch (60000); S0IN = 0x00; twatch (60000); S0IN = 0x00; twatch (60000); S0IN = 0x00; twatch (60000); S0IN = 0x05; twatch (60000); S0IN = 0xDA; twatch (60000); // } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SALOME 0 24 июня, 2008 Опубликовано 24 июня, 2008 · Жалоба Скорее всего нужно написать скрипт, который запустить в отладчике. как то сложно все. Хотелось бы просто в окошечко SPIDAT в указанной закладке данный написать , а они бы воспринялись прогой. Например изменение флага ISPI тут же вызывает переход проги на прерывание. А SPIDAT обнуляется и ничего в прогу не передается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 10 24 июня, 2008 Опубликовано 24 июня, 2008 · Жалоба А SPIDAT обнуляется и ничего в прогу не передается. Попробуйте поставить останов на процедуру прерывания и DAT меняйте после ISPI и останова. P.S. Нет. Так тоже - сбрасывается. Похоже, что нужно будет написать свой симулятор SPI на AGSI. Ну, или руками прописывать нужные значения в переменную, в которую SPIDAT читаются... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fufelly 0 24 июня, 2008 Опубликовано 24 июня, 2008 · Жалоба Подскажите, плз, как сделать, чтобы при отладке программы в Кeil uVision3 данные записанные в окне отладчика SPIDAT записывались в память при пошаговой отладке? Просто в консоли написать, например: SPI_IN=0x12 После очередного обмена, когда txbsy стал нулем именно это значение окажется в SPI0DAT в том самом непослушном окне Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SALOME 0 25 июня, 2008 Опубликовано 25 июня, 2008 · Жалоба Просто в консоли написать, например: SPI_IN=0x12 После очередного обмена, когда txbsy стал нулем именно это значение окажется в SPI0DAT в том самом непослушном окне Попробовала Вашу методу. У меня она не сработала. Я отлаживаю ADuC845 и "txbsy, SPI0DAT" в нем отсутствуют. Вообщем-то я выхожу из положения путем записи данных от SPI в целевой регистр. Но это уже извраты. Хотелось бы нормально работать с отладчиком. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 27 июня, 2008 Опубликовано 27 июня, 2008 · Жалоба Тут и тут расписано как это сделать. Подрихтуйте под свои нужды приведенный скрипт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SALOME 0 30 июня, 2008 Опубликовано 30 июня, 2008 · Жалоба Тут и тут расписано как это сделать. Подрихтуйте под свои нужды приведенный скрипт. Подскажите, плз, как этими скриптами пользоваться. Как оболочка с ними взимодействует? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 1 июля, 2008 Опубликовано 1 июля, 2008 · Жалоба В общем - создаете файл *.ini, сохраняете его, допустем в папке с проектом. Открываете дебаг/функшн эдитор, подгружаете файл. В файле пишете скрипт и компилируете его. Если ошибок нету, скрипт можно запустить на выполнение из командной строки дебагера. В моем случае, я вводил в командной строке I2CMemory(). После этого симулятор начинал эмулировать внешнюю и2с память, с отображением ее внутреннего пространства на указанных адресах и отображением обмена в соответсвующем окне. У кейла ядерный симулятор. Я отладил в нем даже обмен с хостовой программой на PC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fufelly 0 3 июля, 2008 Опубликовано 3 июля, 2008 · Жалоба Попробовала Вашу методу. У меня она не сработала. Я отлаживаю ADuC845 1. Процессор не был указан и я привел пример для Silabs F023 2. SPI процессора в режиме SLAVE (я так понял) и это ВАЖНО! #include <aduc845.h> unsigned char a; void main(void) { SPICON=0x2b; for(;;){ SPIDAT=0x45; for(;! ISPI;); a=SPIDAT; // ставим сюда точку останова } } 3. Запускаем программу на выполнение 4. В консоли пишем spi_ss=0 spi_in=0x12 spi_ss=1 5. Срабатывает точка останова и в переменную a попадает 0x12, а консольная переменная spi_out принимает значение 0x45, в чем можно убедиться просто набрав в консоли: spi_out Следующим этапом должно стать освоение работы с ini файлами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться