Jump to content

    

singlskv

Свой
  • Content Count

    1680
  • Joined

  • Last visited

Community Reputation

0 Обычный

About singlskv

  • Rank
    дятел
  • Birthday 07/30/1974

Информация

  • Город
    Array
  1. Это они скорее всего просто погорячились... обычно: есть соответствующий уарту RTS == есть автоматическое управление направлением передачи(то что имеют в виду под 485)
  2. AT91SAM9263 и I2C

    вот здесь +10000 я всегда говорю разработчикам схемы что i2c на AT91 без особой надобности применять нельзя, ОДНАКО, даже с софтовым слейвом на AVR у меня все работает, и даже при закоротке линий... но конечно там все достаточно криво...
  3. Atmel SAM3U4

    В конечном продукте наверное использую IAP но понять что я делаю не так при размещении функций в SRAM хотелось-бы... может я еще что-нить недопонял в настройке басматрикск ? у меня пока вот такЖ ldr r1, =MATRIX_BASE_ADDRESS ldr r0, =(2 << MATRIX_SCFG0_DEFMSTR_TYPE_BIT) | (1 << MATRIX_SCFG0_FIXED_DEFMSTR_BIT) str r0, [r1, #MATRIX_SCFG0_BASE_OFFSET] str r0, [r1, #MATRIX_SCFG1_BASE_OFFSET] ldr r0, =(2 << MATRIX_SCFG0_DEFMSTR_TYPE_BIT) | (0 << MATRIX_SCFG0_FIXED_DEFMSTR_BIT) str r0, [r1, #MATRIX_SCFG3_BASE_OFFSET] str r0, [r1, #MATRIX_SCFG4_BASE_OFFSET]
  4. Atmel SAM3U4

    то есть у Вас из рам все работает ? при записи в флеш тогда буду копать скрипт линкера... просто у меня какая-то фигня генерица компилятором похоже... не вижу чего-нить непрвильного в map файле Hardfault генерит вызов функции WORD ModbusCrcBuff(BYTE *buff, DWORD len); вот их описание: //---- CRC sections #define FAST_SECTION __attribute__((section(".fast"))) #define FLASH_CONST_ARRAY static const #define RAM_ARRAY #define MODBUS_CRC_SECTION FAST_SECTION #define CRC8_SECTION FAST_SECTION #define MODBUS_CRC_TABLE RAM_ARRAY #define CRC8_TABLE RAM_ARRAY ......................... #if !defined(MODBUS_CRC_SECTION) #define MODBUS_CRC_SECTION #endif #if !defined(CRC8_SECTION) #define CRC8_SECTION #endif #if !defined(FLASH_CONST_ARRAY) #define FLASH_CONST_ARRAY static const #endif #if !defined(MODBUS_CRC_TABLE) #define MODBUS_CRC_TABLE FLASH_CONST_ARRAY #endif #if !defined(CRC8_TABLE) #define CRC8_TABLE FLASH_CONST_ARRAY #endif #include "ModbusCrc.h" MODBUS_CRC_TABLE BYTE ModbusCrcLo[256] = { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40 }; MODBUS_CRC_TABLE BYTE ModbusCrcHi[256]= { 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40 }; WORD ModbusCrc(WORD crc, BYTE data) MODBUS_CRC_SECTION; WORD ModbusCrc(WORD crc, BYTE data) { BYTE crclo = crc; BYTE crchi = crc >> 8; BYTE index = crclo ^ data; crclo = crchi ^ ModbusCrcLo[index]; crchi = ModbusCrcHi[index]; return (crchi << 8) | crclo; } WORD ModbusCrcBuff(BYTE *buff, DWORD len) MODBUS_CRC_SECTION; WORD ModbusCrcBuff(BYTE *buff, DWORD len) { BYTE index; BYTE crclo = MODBUS_CRC_LO_DEFAULT; BYTE crchi = MODBUS_CRC_HI_DEFAULT; while (len--) { index = crclo ^ *buff++; crclo = crchi ^ ModbusCrcLo[index]; crchi = ModbusCrcHi[index]; } return (crchi << 8) | crclo; } CRC8_TABLE BYTE DallasCrc[256] = { // Полином 0x8C 0, 94,188,226, 97, 63,221,131,194,156,126, 32,163,253, 31, 65, 157,195, 33,127,252,162, 64, 30, 95, 1,227,189, 62, 96,130,220, 35,125,159,193, 66, 28,254,160,225,191, 93, 3,128,222, 60, 98, 190,224, 2, 92,223,129, 99, 61,124, 34,192,158, 29, 67,161,255, 70, 24,250,164, 39,121,155,197,132,218, 56,102,229,187, 89, 7, 219,133,103, 57,186,228, 6, 88, 25, 71,165,251,120, 38,196,154, 101, 59,217,135, 4, 90,184,230,167,249, 27, 69,198,152,122, 36, 248,166, 68, 26,153,199, 37,123, 58,100,134,216, 91, 5,231,185, 140,210, 48,110,237,179, 81, 15, 78, 16,242,172, 47,113,147,205, 17, 79,173,243,112, 46,204,146,211,141,111, 49,178,236, 14, 80, 175,241, 19, 77,206,144,114, 44,109, 51,209,143, 12, 82,176,238, 50,108,142,208, 83, 13,239,177,240,174, 76, 18,145,207, 45,115, 202,148,118, 40,171,245, 23, 73, 8, 86,180,234,105, 55,213,139, 87, 9,235,181, 54,104,138,212,149,203, 41,119,244,170, 72, 22, 233,183, 85, 11,136,214, 52,106, 43,117,151,201, 74, 20,246,168, 116, 42,200,150, 21, 75,169,247,182,232, 10, 84,215,137,107, 53 }; BYTE Crc8Buff(BYTE *buff, DWORD len) CRC8_SECTION; BYTE Crc8Buff(BYTE *buff, DWORD len) { BYTE index; BYTE crc = CRC8_DEFAULT; while (len--) { index = crc ^ *buff++; crc = DallasCrc[index]; } return crc; } LoaderSdi16.rar
  5. Atmel SAM3U4

    А что делать с функциями записи в флеш ? у меня что-то какая-то фигня беру свою стандартную(от арм7) функцию которая работает в секции .fast и считает просто CRC16 вылетаю в hardfault соответственно вопрос про запись в флеш запускать из SRAM(а как ?) или юзать IAP из SAM-BA ? хотя конечно возможно у CrossWorks странный конфиг по умолчанию....
  6. Atmel SAM3U4

    Ну вот и вопросики нарисовались: 1. Ремап векторов в SRAM улучшает производительность(учитываем различные шины для доступа к FLASH и SRAM) ? 2. Размещение функции которая должна максимально быстро работать в SRAM дает преимущество как на ARM7 или нет ? (ARM вроде как утверждает что из-за наличия многих шин код не нужно размещать в SRAM) 3. Какие ограничения имеет PDC по пропускной способности ?
  7. SAM3U и I2C

    [/quote name=aaarrr' date='Sep 8 2011, 21:45' post='970432] Держите. Но только совершенный as is, никаких комментариев не будет - наелся я уже атмеловского TWI и слышать о нем больше не хочу. iic.rar //------------------------------------------------------------------------------ static void I2cISR(void) __attribute__ ((interrupt ("IRQ"))); // I2C #define I2C_SEND_BUFF_LENGTH 2 #define I2C_RECV_BUFF_LENGTH 8 #define I2C_MEGA_ADDR 0xB2 // адрес меги на шине i2c enum { I2C_STATE_FREE = 0, I2C_STATE_SEND, I2C_STATE_RECEIVE, I2C_STATE_RECEIVED }; //------------------------------------------------------------------------------ // DWORD I2cSetSpeed(DWORD baud) // Установка скорости уарта // Input: // baud - скорость i2c // Output: реальная скорость уарта //---- DWORD I2cSetSpeed(DWORD baud) { int div, ckdiv, chdiv, cldiv; div = MCK_FREQUENCY / baud; div -= 6; // const ckdiv = 0; while (div > 510) { ckdiv++; if (ckdiv >= 8) return 0; div >>= 1; } chdiv = div >> 1; cldiv = div - chdiv; TWI_IDR = 0xFFFFFFFF; AIC_ICCR = (1 << TWI_ID); TWI_CR = TWI_CR_SWRST; TWI_CR = TWI_CR_MSEN; TWI_CWGR = (ckdiv << 16) | (chdiv << 8) | cldiv; return baud; } typedef struct { DWORD State; DWORD Index; DWORD MessageLength; BYTE OutBuff[i2C_SEND_BUFF_LENGTH]; BYTE InBuff[i2C_RECV_BUFF_LENGTH]; } Mega; Mega mega; BYTE Do_ticks; DWORD Do_state; DWORD Di_time; DWORD Di_cnt[6]; WORD DiLastFiltrWidth[5]; // размер окна фильтрации WORD DiFiltrCounter[5]; // счетчик фильтра DWORD SecondCounter; void SysTimerHandler() { DWORD tmp, i, bit; static DWORD StateTimeout; if (++SecondCounter >= 1000) { SecondCounter = 0; base.WorkingTime++; TimeFromStart++; } .................. if (mega.State != I2C_STATE_RECEIVED) StateTimeout++; else StateTimeout = 0; if (StateTimeout >= 2) { StateTimeout = 0; TWI_IDR = 0xFFFFFFFF; TWI_CR = TWI_CR_MSDIS; PMC_PCDR = (1 << TWI_ID); PIOA_PER = BIT1; PIOA_OER = BIT1; for (i = 0; i < 9; i++) { PIOA_SODR = BIT1; asm("nop");asm("nop");asm("nop");asm("nop"); asm("nop");asm("nop");asm("nop");asm("nop"); asm("nop");asm("nop");asm("nop");asm("nop"); asm("nop");asm("nop");asm("nop");asm("nop"); asm("nop");asm("nop");asm("nop");asm("nop"); asm("nop");asm("nop");asm("nop");asm("nop"); asm("nop");asm("nop");asm("nop");asm("nop"); asm("nop"); PIOA_CODR = BIT1; asm("nop");asm("nop");asm("nop");asm("nop"); asm("nop");asm("nop");asm("nop");asm("nop"); asm("nop");asm("nop");asm("nop");asm("nop"); asm("nop");asm("nop");asm("nop");asm("nop"); asm("nop");asm("nop");asm("nop");asm("nop"); asm("nop"); } PIOA_SODR = BIT1; PIOA_ODR = BIT1; PIOA_PDR = BIT1; PMC_PCER = (1 << TWI_ID); I2cSetSpeed(140000); mega.State = I2C_STATE_FREE; } switch (mega.State) { case I2C_STATE_RECEIVED: ............ TWI_MMR = ((I2C_MEGA_ADDR >> 1) << 16); TWI_THR = mega.OutBuff[0]; TWI_CR = TWI_CR_STOP; TWI_IER = TWI_IER_TXRDY | TWI_IER_TXCOMP; break; } case I2C_STATE_FREE: if (mega.State == I2C_STATE_FREE) DI &= ~BIT7; // нет связи с мегой mega.State = I2C_STATE_SEND; mega.Index = 0; ........... TWI_MMR = ((I2C_MEGA_ADDR >> 1) << 16); TWI_THR = mega.OutBuff[0]; TWI_CR = TWI_CR_STOP; TWI_IER = TWI_IER_TXRDY | TWI_IER_TXCOMP; break; } ........................... } //------------------------------------------------------------------------------ // static void I2cISR(void) // Обработчик прерывания I2C //---- static void I2cISR(void) { DWORD sr; AIC_IVR = 0; sr = TWI_SR; if (mega.State == I2C_STATE_SEND) { if (sr & TWI_SR_TXRDY) { mega.Index++; TWI_THR = mega.OutBuff[1]; TWI_IDR = 0xFFFFFFFF; TWI_IER = TWI_IER_TXCOMP; } if (sr & TWI_SR_TXCOMP) { if ((sr & TWI_SR_NACK) || (mega.Index == 0)) { TWI_IDR = 0xFFFFFFFF; mega.State = I2C_STATE_FREE; } else { mega.State = I2C_STATE_RECEIVE; mega.MessageLength = I2C_RECV_BUFF_LENGTH; mega.Index = 0; TWI_MMR = ((I2C_MEGA_ADDR >> 1) << 16) | TWI_MMR_MREAD; TWI_RHR; TWI_CR = TWI_CR_START; TWI_IDR = 0xFFFFFFFF; TWI_IER = TWI_IER_TXCOMP | TWI_IER_RXRDY; } } } else if (mega.State == I2C_STATE_RECEIVE) { if (sr & TWI_SR_RXRDY) { mega.InBuff[mega.Index] = TWI_RHR; mega.Index++; if (mega.Index == (I2C_RECV_BUFF_LENGTH - 1)) { TWI_CR = TWI_CR_STOP; } else if (mega.Index == I2C_RECV_BUFF_LENGTH) { TWI_IDR = 0xFFFFFFFF; mega.State = I2C_STATE_RECEIVED; } } else if (sr & TWI_SR_TXCOMP) { TWI_IDR = 0xFFFFFFFF; mega.State = I2C_STATE_RECEIVED; } } else { TWI_IDR = 0xFFFFFFFF; mega.State = I2C_STATE_FREE; TWI_RHR; } AIC_EOICR = 0; } вот как и обещал, пример для SAM7 драйвера у мну нет как такового нет, но кто в теме поймет... если стер что лишнее, телеграфируйте...
  8. SAM3U и I2C

    Если не сложно, покажите запуск PDC для I2C, не могу понять как его стартовать в различных вариантах: -запись от мастера слейву -чтение от слейва ну или полный драйвер запостите с PDC если запостите полный драйвер, обещаю опубликовать свое решение, если конечно выгорит..., ну и как бонус могу опубликовать решение для SAM7.
  9. Не, на пике 12тактов на авр 13 тактов лучше не сделать
  10. Atmel SAM3U4

    я года 4 сидел с "неправильным" тактом из-за этой "особенности", правда в моем случае ошибка была практически ничтожна 1/24000, но все же я ее случайно поймал и после пятого прочтения даташита я нашел нужные слова: When WAVSEL = 10, the value of TC_CV is incremented from 0 to the value of RC, then automatically reset on a RC Compare. автоматически это видимо именно значит в тот же момент не зависимо от прескейлера и выяснилось это все при программировании PWM контроллера когда у меня банально не совпали частоты... ну и да, я включился в ряды SAM3водил, так что по мере освоения могу тоже давать ответы и задавать вопросы, и если топикстартер не против(?) то буду делать это в этой теме...
  11. Вопрос решился выносом модема на удлинителе 5 метров под крышу дома, стабильный мегабит в сек получен.
  12. 3G это 2100Мгц спутники в 2-6 раз больше это понятно непонятно что должно быть с землями непонятно зачем там дырки столь причудливой формы непонятно с какой точностью ее нужно позиционировать, спутниковые позиционируют до 0,5гр. непонятно как позиционировать, можно ли той же приблудой для настройки спутниковых ? непонятно как будут влиять окно, деревянно-пластиково-утепленные стены, вещь то явно не для установки вне помещения может у кого есть опыт, не обязательно с этой антенной главное условие это отсутствие антенного разъема на модеме про обматывание проволокой модема в районе антенны видел уже много... ну ни до конца понимаю как это может работать...
  13. http://remo-zavod.ru/katalog/katalog-produ...800/connect-383 Собственно понятно что некоторый эффект это может давать, вопрос в том насколько сильный, ну и еще насколько точно такую антенну придется позиционировать про такие СВЧ антенны не знаю почти нифига... но представляю как и с какими допусками, например, нужно настраивать спутниковые антенны Вообщем задача в улучшении приема 3G модема E173, дача находится в зоне неуверенного приема, если проехать 500-800 метров в сторону вышки то все OK, рельеф не сильно сложный, но есть пригорочек по пути до базовой станции + деревья в среднем кол-ве
  14. ну тогда первое получение (а mod k1) таки честное деление ну а деление на {2,4,6} с остатком это жеж совсем просто, для 2 и 4 все совсем очевидно, для 6 решается ну совсем простым домножением
  15. А если повезет с числами k1 и k2, то и этого не нужно будет :) ТС, так какие там у Вас числа k1 и k2 ?