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

Dimchansky

Свой
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о Dimchansky

  • Звание
    Участник
    Участник
  • День рождения 09.10.1978

Контакты

  • Сайт
    Array
  • ICQ
    Array
  1. Я бы всё-таки рекомендовал Linux под VMware. Linux сейчас достаточно дружественная система, устанавливается не сложнее WinXP. Если трафик дорогой, то можно заказать тот же диск с Ubuntu за бесплатно (нахаляву). В 6-ой версии VMWare вообще облегчили жизнь в том плане, что операции drag-and-drop работают между ОС, есть сразу общая папка, общий буфер обмена, даже не замечаешь, что работаешь сразу в двух ОС, складывается впечатление, что это просто окошко с программой. :)
  2. Доброго времени суток, Попробовал следовать инструкции на страничке: http://heavy-online.ru/arm-linux/ предварительно скачав все нужные файлы. Делал пошагово (применял все патчи), а на сборке glibc, где написано, что собирается очень долго и можно идти пить пиво, конкретно на строчке: make 2>&1 | tee make.out пива попить не удалось, т.к. тут же вывалился с ошибкой: arm-linux-gcc version.c -c -std=gnu99 -O2 -Wall -Winline -Wstrict-prototypes -Wwrite-strings -g -I../include -I. -I/usr/local/arm/src/BUILD/glibc-2.3.6/csu -I.. -I../libio -I/usr/local/arm/src/BUILD/glibc-2.3.6 -I../sysdeps/arm/elf -I../linuxthreads/sysdeps/unix/sysv/linux/arm -I../linuxthreads/sysdeps/unix/sysv/linux -I../linuxthreads/sysdeps/pthread -I../sysdeps/pthread -I../linuxthreads/sysdeps/unix/sysv -I../linuxthreads/sysdeps/unix -I../linuxthreads/sysdeps/arm -I../sysdeps/unix/sysv/linux/arm -I../sysdeps/unix/sysv/linux -I../sysdeps/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix/arm -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/arm -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic -nostdinc -isystem /usr/local/arm/lib/gcc/arm-linux/3.4.6/include -isystem /usr/local/arm/sysroot/usr/include -D_LIBC_REENTRANT -include ../include/libc-symbols.h -DHAVE_INITFINI -o /usr/local/arm/src/BUILD/glibc-2.3.6/csu/version.o -MD -MP -MF /usr/local/arm/src/BUILD/glibc-2.3.6/csu/version.o.dt -MT /usr/local/arm/src/BUILD/glibc-2.3.6/csu/version.o In file included from version.c:33: /usr/local/arm/src/BUILD/glibc-2.3.6/csu/version-info.h:2: error: missing terminating " character /usr/local/arm/src/BUILD/glibc-2.3.6/csu/version-info.h:3: error: missing terminating " character version.c:40: error: syntax error before string constant make[2]: *** [/usr/local/arm/src/BUILD/glibc-2.3.6/csu/version.o] Ошибка 1 make[2]: Leaving directory `/usr/local/arm/src/glibc-2.3.6/csu' make[1]: *** [csu/subdir_lib] Ошибка 2 make[1]: Leaving directory `/usr/local/arm/src/glibc-2.3.6' make: *** [all] Ошибка 2 В чём может быть проблема? Может быть нужно ещё какие-то патчи наложить? Я накладывал все, что нашёл в http://heavy-online.ru/arm-linux/files/packages/patches/ Собираю всё под Ubuntu Feisty 7.04 в Vmware. Есть идеи? UPDATE Похоже, нашёл в чём проблема. Проблема в dash, который используется в Ubuntu в качестве шелла по умолчанию. Люди предлагают два варианта: 1. Патчить Makeconfig 2. Поменять dash на bash Второй мне кажется проще, чем каждый раз патчить Makeconfig. Узнаём, какой шелл используется по умолчанию: ls -la /bin/sh Меняем на bash: sudo ln -sf /bin/bash /bin/sh Завтра проверю, поможет ли.
  3. Может оффтоп.. Не смотрели в сторону проекта USRP? Проект открытый, с исходниками, схемами и PCB.
  4. Коллеги, закидайте меня, пожалуйста материалом на тему сабжа. Желательно на русском языке. В инете нашёл только ссылку на книгу: Спектры и анализ. Изд.4. Харкевич А.А. 2007. 240 с. с главой: § 8. Перенос спектра Постановка задачи; однополосная модуляция. Перенос спектра путем двухфазной и многофазной модуляции. Векторная диаграмма. Возможность переноса спектра импульсным методом. Но в цифровом виде этого нету. Мне интересна любая информация, начиная с азов. Также хотелось бы почитать разжёвывание термина "квадратурная демодуляция".
  5. Кидаю листинг. 1 processor 16F84 2 opt pw 79 3 psect __Z44553RS_,global,delta=1 4 psect text0,local,class=CODE,delta=2 5 psect config,global,class=CONFIG,delta=2 6 psect rdata_0,global,class=BANK0,space=1,delta + =1 7 psect idata_0,global,class=CODE,delta=2 8 psect intcode,global,class=CODE,delta=2 9 psect intsave_0,global,ovrld,class=BANK0,space + =1,delta=1 10 psect intret,global,class=CODE,delta=2 11 psect intentry,global,class=CODE,delta=2 12 psect intsave,global,class=BANK0,space=1,delta + =1 13 psect text1,local,class=CODE,delta=2 14 psect text2,local,class=CODE,delta=2 15 psect rbit_0,global,bit,class=BANK0,space=1,de + lta=1 16 psect rbss_0,global,class=BANK0,space=1,delta= + 1 17 0000 18 0000 19 0000 20 0000 21 0000 22 0000 23 0000 24 0000 25 0000 26 0000 27 28 psect __Z44553RS_ 29 001E 30 001E ;# 31 32 psect config 33 2007 3FF9 dw 16377;# 34 35 psect rdata_0 36 001B _keysRepeat 37 001B ds 2 38 39 psect idata_0 40 03FE 3401 retlw 1 41 03FF 3400 retlw 0 42 43 psect intcode 44 0008 _isr 45 0008 int_func 46 ;main.c: 69: if(T0IF) 47 0008 1D0B btfss 11,2 48 0009 280E goto l2 49 ;main.c: 70: { 50 000A 110B bcf 11,2 51 ;main.c: 72: TMR0 = -((2*(10000000)/4/(8)/(2000 + )+1)/2); 52 000B 3064 movlw 100 53 000C 1283 bcf 3,5 54 000D 0081 movwf 1;volatile 55 000E l2 56 ;main.c: 77: { 57 000E 1283 bcf 3,5 58 ;main.c: 73: } 59 000F 1C8B btfss 11,1 60 0010 2818 goto L1 61 0011 140D bsf _extInterruptOccured/(0+8),_extInterruptOc + cured& (0+7) 62 ;main.c: 80: KEYPAD_DATA = !KEYPAD_DATA; 63 0012 3001 movlw 1 64 0013 0685 xorwf 5 65 ;main.c: 81: KEYPAD_INT = !KEYPAD_INT; 66 0014 3080 movlw 128 67 0015 0686 xorwf 6 68 ;main.c: 82: INTF = 0; 69 0016 108B bcf 11,1 70 ;main.c: 83: } 71 0017 1283 bcf 3,5 72 0018 L1 73 74 psect intsave_0 75 000C saved_w 76 000C ds 1 77 78 psect intret 79 0018 int_restore 80 0018 0820 movf saved_status,w 81 0019 0083 movwf 3 82 001A 0E8C swapf saved_w 83 001B 0E0C swapf saved_w,w 84 001C 0009 retfie 85 86 psect intentry 87 0004 int_entry 88 0004 008C movwf saved_w 89 0005 0803 movf 3,w 90 0006 0183 clrf 3 91 0007 00A0 movwf saved_status 92 93 psect intsave 94 0020 saved_status 95 0020 ds 1 96 97 psect text1 98 ;main.c: 88: void main(void) 99 ;main.c: 89: { 100 03CF _main 101 ;main.c: 92: INTCON = 0; 102 03CF 018B clrf 11;volatile 103 ;main.c: 94: RBPU = 0; 104 03D0 1683 bsf 3,5 105 03D1 1381 bcf 1,7 106 ;main.c: 95: PORTB = 0xFF; 107 03D2 30FF movlw -1 108 03D3 1283 bcf 3,5 109 03D4 0086 movwf 6;volatile 110 ;main.c: 96: TRISB = 0b00000001; 111 03D5 3001 movlw 1 112 03D6 1683 bsf 3,5 113 03D7 0086 movwf 6;volatile 114 ;main.c: 98: PORTA = 0xFF; 115 03D8 30FF movlw -1 116 03D9 1283 bcf 3,5 117 03DA 0085 movwf 5;volatile 118 ;main.c: 99: TRISA = 0b00011110; 119 03DB 301E movlw 30 120 03DC 1683 bsf 3,5 121 03DD 0085 movwf 5;volatile 122 ;main.c: 101: TMR0 = 0; 123 03DE 1283 bcf 3,5 124 03DF 0181 clrf 1;volatile 125 ;main.c: 102: TMR0 = -((2*(10000000)/4/(8)/(200 + 0)+1)/2); 126 03E0 3064 movlw 100 127 03E1 0081 movwf 1;volatile 128 ;main.c: 103: T0CS = 0; 129 03E2 1683 bsf 3,5 130 03E3 1281 bcf 1,5 131 ;main.c: 104: PSA = 0; 132 03E4 1181 bcf 1,3 133 ;main.c: 105: { PS2 = 0; PS1 = 1; PS0 = 0; }; 134 03E5 1101 bcf 1,2 135 03E6 1481 bsf 1,1 136 03E7 1001 bcf 1,0 137 ;main.c: 106: T0IF = 0; 138 03E8 110B bcf 11,2 139 ;main.c: 107: T0IE = 1; 140 03E9 168B bsf 11,5 141 ;main.c: 109: INTEDG = 0; 142 03EA 1301 bcf 1,6 143 ;main.c: 110: INTF = 0; 144 03EB 108B bcf 11,1 145 ;main.c: 111: INTE = 1; 146 03EC 160B bsf 11,4 147 ;main.c: 113: GIE = 1; 148 03ED 178B bsf 11,7 149 ;main.c: 115: KEYPAD_DATA = KEYPAD_INT = KEYPAD + _CLK; 150 03EE 1283 bcf 3,5 151 03EF 1C06 btfss 6,0 152 03F0 2BF3 goto u30 153 03F1 1786 bsf 6,7 154 03F2 2BF4 goto u44 155 03F3 u30 156 03F3 1386 bcf 6,7 157 03F4 u44 158 03F4 1283 bcf 3,5 159 03F5 1F86 btfss 6,7 160 03F6 2BF9 goto u40 161 03F7 1405 bsf 5,0 162 03F8 2BFA goto l6 163 03F9 u40 164 03F9 1005 bcf 5,0 165 03FA l6 166 ;main.c: 117: while(1) 167 ;main.c: 118: { 168 03FA 1283 bcf 3,5 169 03FB 3002 movlw 2 170 03FC 0686 xorwf 6 171 ;main.c: 120: } 172 03FD 2BFA goto l6 173 174 psect text2 175 0000 176 0000 177 0000 178 0000 179 0000 180 0000 181 0000 182 0000 183 0000 184 0000 185 0000 186 0000 187 0000 188 0000 189 0000 190 0000 191 0000 192 0000 193 0000 194 0000 195 0000 196 0000 197 0000 198 0000 199 0000 200 0000 201 0000 202 0000 203 0000 204 0000 205 0000 206 0000 207 0000 208 0000 209 0000 210 0000 211 0000 212 0000 213 0000 214 0000 215 0000 216 0000 217 0000 218 0000 219 0000 220 0000 221 0000 222 0000 223 0000 224 0000 225 0000 226 0000 227 0000 228 0000 229 0000 230 0000 231 0000 232 0000 233 234 psect rbit_0 235 0068 _extInterruptOccured 236 0068 ds 1 237 0069 _transferKeyPressing 238 0069 ds 1 239 0000 240 0000 241 0000 242 0000 243 0000 244 0000 245 0000 246 0000 247 0000 248 0000 249 0000 250 0000 251 0000 252 0000 253 0000 254 0000 255 256 psect rbss_0 257 000E _keys_column 258 000E ds 1 259 000F _RTC 260 000F ds 2 261 0011 _idx 262 0011 ds 2 263 0013 _keys 264 0013 ds 2 265 0015 _keysCount 266 0015 ds 2 267 0017 _keysLastSaved 268 0017 ds 2 269 0019 _keysLastValid 270 0019 ds 2 HI-TECH Software PICC Macro Assembler V8.05PL2 Symbol Table Tue Mar 27 15:31:45 2007 l2 000E l6 03FA u30 03F3 u40 03F9 u44 03F4 _keysLastSaved 0017 _keysLastValid 0019 _RTC 000F _idx 0011 _isr 0008 _keysCount 0015 _main 03CF _keys 0013 start 001D saved_w 000C _keys_column 000E clear_bit0 0021 _extInterruptOccured 0068 _transferKeyPressing 0069 int_entry 0004 _keysRepeat 001B saved_status 0020 status 0003 copy_bank0 0025 int_func 0008 clear_bank0 001D int_restore 0018
  6. Попробую конечно, но по datasheet нужно обнулять только INTF и это же я вижу во многих примерах. Т.е. код INTE=0; INTE=1; в обработчике прерывания смахивает на какой-то хак. Сдаётся мне, что у меня что-то с сигналами на RB0/INT, может там вообще в третье состояние всё уходит.. :cranky:
  7. Есть программа для PIC16F84, которая работает в Proteus и не пашет на практике. Прерывание на RB0/INT по заднему фронту срабатывает только один раз. Для теста вырезал код и переделал его немного. На RB0/INT меняются уровни, по заднему фронту должны изменится на противоположное состояние уровни на RA0 и RB7. Я решил воспользоваться аппаратным прерыванием для этого (хотя програмная эмуляция того же самого работает на ура). Чтобы было понятно, делаю вырезку кода на C, там много лишнего, но сути, надеюсь, не меняет.. #include <pic.h> // Setup the configuration word #if defined (_16F84) #warning PIC16F84 selected __CONFIG(WDTDIS & XT & UNPROTECT); // 0x3FF9 for PIC16F84 #else #error Unsupported PICmicro MCU selected #endif static volatile bit KEYPAD_DATA @ PORTBIT(PORTA, 0); static volatile bit KEYPAD_INT @ PORTBIT(PORTB, 7); static volatile bit KEYPAD_CLK @ PORTBIT(PORTB, 0); static volatile bit WORKINGBIT @ PORTBIT(PORTB, 1); // Setup TMR0 to interrupt Mainline once every ~500 usecs #define XTAL (10000000) // 10 MHZ #define PRE (8) // prescaler #define INT_HZ (2000) // interrupt freq. is 2KHz #define DIVIDE ((2*XTAL/4/PRE/INT_HZ+1)/2) // division ratio - must be < 256 #define KEYS_SAMPLING (2*5) // 5 ms #define KEYS_PRE_REPEAT (2*500) // 500 ms #define KEYS_REPEAT (2*30) // 30 ms #define CONNECTION_TIMEOUT (2*1) // 1 ms #define TIME_BEFORE_RECONNECT (2*1) // 1 ms #define MATRIXKEYPAD_ROWS (3) #if PRE == 256 #define SET_PRESCALER { PS2 = 1; PS1 = 1; PS0 = 1; } #elif PRE == 128 #define SET_PRESCALER { PS2 = 1; PS1 = 1; PS0 = 0; } #elif PRE == 64 #define SET_PRESCALER { PS2 = 1; PS1 = 0; PS0 = 1; } #elif PRE == 32 #define SET_PRESCALER { PS2 = 1; PS1 = 0; PS0 = 0; } #elif PRE == 16 #define SET_PRESCALER { PS2 = 0; PS1 = 1; PS0 = 1; } #elif PRE == 8 #define SET_PRESCALER { PS2 = 0; PS1 = 1; PS0 = 0; } #elif PRE == 4 #define SET_PRESCALER { PS2 = 0; PS1 = 0; PS0 = 1; } #elif PRE == 2 #define SET_PRESCALER { PS2 = 0; PS1 = 0; PS0 = 0; } #else #error Bad prescaler value. #endif // Global Variables volatile unsigned int RTC = 0; // Real Time Clock Counter unsigned int idx = 0; // index for cycles in interrupt handler unsigned int keys = 0; // current keys pressed (each bit - is one key) unsigned int keysLastSaved = 0; unsigned char keys_column = 0; // keys pressed in current column (each bit - is one key) unsigned int keysCount = 0; unsigned int keysRepeat = 1; volatile unsigned keysLastValid = 0; volatile bit transferKeyPressing = 0; volatile bit extInterruptOccured = 0; // Interrupt Handler void interrupt isr(void) { // TMR0 Interrupt Handler if(T0IF) { T0IF = 0; // Reset Interrupt Flag TMR0 = -DIVIDE; } // if(T0IF) // Put Different Interrupt Handlers here if(INTF) { // RB0/INT Pin Interrupt extInterruptOccured = 1; KEYPAD_DATA = !KEYPAD_DATA; KEYPAD_INT = !KEYPAD_INT; INTF = 0; // Reset Interrupt } } // End Interrupt Handler // Mainline void main(void) // Template Mainline { // unsigned char i; INTCON = 0; // purpose of disabling the interrupts. RBPU = 0; // enable internal pullups on PORTB PORTB = 0xFF; // TRISB = 0b00000001; // RB0 - inputs, RB1..RB7 - outputs PORTA = 0xFF; TRISA = 0b00011110; // RA0 - outputs, RA1-RA4 - inputs TMR0 = 0; // Reset the TMR0 counter TMR0 = -DIVIDE; T0CS = 0; // Enable timer to get the input from internal counter XTAL/4 PSA = 0; // Enable prescaler to divide the frequency SET_PRESCALER; T0IF = 0; // Make Sure NO Pending Interrupt T0IE = 1; // TMR0 overflow interrupt enable bit (1: enable TMR0) INTEDG = 0; // Interrupt on Falling Edge of RB0 INTF = 0; // Make Sure NO Pending Interrupt INTE = 1; // Enable RBO/INT Pin Interrupts GIE = 1; // global interrupt enable bit (1: enable all) KEYPAD_DATA = KEYPAD_INT = KEYPAD_CLK; while(1) { WORKINGBIT = !WORKINGBIT; } // endwhile } // End of Mainline собирал так: picc -16F84 -ASMLIST -O -Zg -Etest.err -Otest.hex main.c получил test.hex: :10000000830100308A001D288C0003088301A000B2 :100010000B1D0E280B1164308312810083128B1C80 :1000200018280D1401308506803086068B10831247 :10003000200883008C0E0C0E09000E3084001B304B :1000400033200D3084000E303320830103309F00B5 :10005000FE309E001B3084001D3037208301CF2BE3 :1000600004068001840A0406031D302800349D0024 :1000700042208000840A04081D0603190034382831 :1000800083129E009F1B4B281F088A001E089E0A91 :1000900003199F0A820083131F1883171E089E0AE4 :0600A000840000080800C6 :10079E008B0183168113FF3083128600013083167E :1007AE008600FF30831285001E308316850083126B :1007BE00810164308100831681128111011181142F :1007CE0001100B118B1601138B100B168B17831246 :1007DE00061CF32B8617F42B86138312861FF92B18 :1007EE000514FA2B0510831202308606FA2B0134FB :0207FE000034C5 :02400E00F93F78 :00000001FF На практике прерывание происходит ровно один раз. Потом ничего не меняется. В Proteus всё работает, как задумывалось. За нахождение граблей заранее благодарю.
  8. Linux

    Кстати, в Proteus (6.9 SP3, да и в 6.8) есть живой пример uclinux на ARM7. Можно даже поиграть в игру типа MUD. :)
  9. А немцы схем не приводят? Я на сайте у них не нашёл, может плохо искал.
  10. Приветствую многоуважаемый олл. У меня немного праздный вопрос, простите уж. Может быть можете привести примеры реальных приборов (не отладочные evaluation платы!), в которых уже применяется AT91RM9200? Просто интересно стало в каких областях его используют (например, в России или ближнем зарубежье). Спасибо.
  11. На 9 странице сообщение со ссылками.
  12. Я так понял, что ошибки, которые имел ввиду Ruslan1, те, что написаны на самом сайте: WARNING: these files do not work as is. See the errata section. Errata for 20040720 board DBGU serial port miswired. The AT91RM9200 schematic symbol is wrong. Both SOT23-5 packages have wrong pinout. Need to create correct footprints to replace the ones that came with PCB FPGA oscillator pads are mirrored on the board. Fix footprint. Crystals are bigger than the symbol - capacitors are underneath their edges. Create more room in next revision. Not all systems have been tested yet so there may be more.
×
×
  • Создать...