/* ISDN-Sniffer
140115 Aller Anfang …
Portbelegung des AT90USB162:
14 PB0 (!SS) frei
15 PB1 (SCLK) frei für Programmer
16 PB2 (MOSI) frei für Programmer
17 PB3 (MISO) frei für Programmer
18 PB4 (T1) frei
19 PB5 Grüne LED nach Masse
20 PB6 Rote LED nach Masse
21 PB7 (OC1C) Ader 2 + treiben
2 PC0 XTAL2 Quarz 16000 kHz
24 PC1 RESET frei für Programmer
5 PC2 Ader 2 - treiben
26 PC4 Schalter nach LOW: µ-Law (beim Einschalten); B2 belauschen
25 PC5 OC1B Rechter Analogausgabekanal
23 PC6 OC1A Linker Analogausgabekanal
22 PC7 INT4 Low wenn Ader 1B positiv (Hören+)
6 PD0 INT0 Low wenn Ader 2B positiv (Sprechen+)
7 PD1 (AIN0) Ader 2A treiben
8 PD2 RxD frei für Diagnose
9 PD3 TxD frei für Diagnose
10 PD4 INT5 Low wenn Ader 2A positiv (Sprechen-)
11 PD5 (XCK) Ader 1 - treiben
12 PD6 INT6 Low wenn Ader 1A positiv (Hören-)
13 PD7 !HWB Schalter nach LOW: Programmiermodus; D belauschen?
Pardon, da habe ich etwas falsch verstanden:
Der Bootloader (!HWB) wird NUR bei Reset (von PC1) angesprungen!
Bei Power-On-Reset interessiert die Beschaltung von !HWB nicht.
Daher ist jetzt noch ein RC-Glied an Reset.
S0-Rahmen (Datenrate: 192 kBit/s, Rahmenlänge 48 Bit = 250 µs)
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8
╔╤╤═╤╤╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╗
H║0│0│B│B│B│B│B│B│B│B│E│D│A│0│1│b│b│b│b│b│b│b│b│E│D│0│B│B│B│B│B│B│B│B│E│D│0│b│b│b│b│b│b│b│b│E│D│L║
╟─┼─┼┬┼─┼┬┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─╢
S║D│L│0│0│B│B│B│B│B│B│B│B│L│D│L│0│0│b│b│b│b│b│b│b│b│L│D│L│B│B│B│B│B│B│B│B│L│D│L│b│b│b│b│b│b│b│b│L║
╚═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╝
B = B1, b = B2, H = Hören, S = Sprechen, A = Aktivierungszustand
D = Daten, E = Echo, L = Gleichspannungs-Ausgleichsbit
╤┬ = ab da Verletzung AMI-Kodierregel wenn Null
*/
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include "usb.h"
void onSuspend() {
// TIMSK0=0; // keine Interrupts
// EIMSK=0;
// TODO: Resistive Verbraucher (LEDs, PWM) sowie ISR abschalten
}
void onResume() {
// EIMSK=0x71;
// TIMSK0=0x02;
}
int main() {
CLKPR=0x80;
CLKPR=0; // volle 16 MHz aktivieren
byte __attribute__((unused)) mcusr=MCUSR;
MCUSR=0;
WDTCSR=0x18;
WDTCSR=0; // Watchdog aus (ein beim Start aus Urlader)
ACSR =0x80; // Kein Analogvergleicher
PORTB=0x1F; // Freie Pins mit Pull-Up
PORTC=0x90; // Interrupteingänge mit Pullup, Treiber-Ausgänge ohne Pullup
PORTD=0xD1;
DDRB =0x60;
DDRC =0x60;
DDRD =0x0C;
s0Init();
usbInit();
sei();
word t=0;
for(;;) {
// sleep_cpu();
if (!++t) PINB|=0x20; // Grüne LED
usbPoll();
}
}
| Detected encoding: UTF-8 | 0
|