Interfejs USB-DCD w mikrokontrolerach Kinetis
4. Konfiguracja rejestru zegara.
USBDCD_CLOCK=(DCD_TIME_BASE<<2)|1;
5. W tym momencie aplikacja sprawdza stan linii PTB0, aby dokonać detekcji VBUS, ale przerwanie od portu może także zostać wykorzystane zamiast odpytywania.
// Waiting for VBUS
if(FLAG_CHK(0,GPIOB_PDIR) && !FLAG_CHK(VBUS_Flag,gu8InterruptFlags))
{
USBDCD_CONTROL=USBDCD_CONTROL_IE_MASK | USBDCD_CONTROL_IACK_MASK;
FLAG_SET(USBDCD_CONTROL_START_SHIFT,USBDCD_CONTROL);
FLAG_SET(VBUS_Flag,gu8InterruptFlags);
}
6. Gdy sekwencja detekcji jest ukończona, aplikacja musi odczytać rezultat z rejestrów DCD, a następnie wysłać je do terminala.
// Rezultaty DCD.
if(FLAG_CHK(DCD_Flag,gu8InterruptFlags))
{
u8Error=DCD_GetChargerType();
if((u8Error&0xF0))
printf("Oooooops DCD Error");
else
{
if((u8Error&0x0F)==STANDARD_HOST)
printf("Connected to a Standard Host");
if((u8Error&0x0F)==CHARGING_HOST)
printf("Connected to a Charging Host");
if((u8Error&0x0F)==DEDICATED_CHARGER)
printf("Connected to a Dedicated Charger");
}
Funkcja zwracająca rodzaj ładowarki:
UINT8 DCD_GetChargerType(void)
{
UINT8 u8ChargerType;
u8ChargerType = (UINT8)((USBDCD_STATUS & USBDCD_STATUS_SEQ_RES_MASK)>>16);
u8ChargerType|= (UINT8)((USBDCD_STATUS & USBDCD_STATUS_FLAGS_MASK)>>16);
return(u8ChargerType);
}
Program obsługi przerwania DCD:
void DCD_ISR(void)
{
USBDCD_CONTROL|= USBDCD_CONTROL_IACK_MASK; // Potwierdzenie.
if((USBDCD_STATUS&0x000C0000) == 0x00080000)
FLAG_SET(USBOTG_CONTROL_DPPULLUPNONOTG_SHIFT,USBOTG_CONTROL); // Uruchomienie pull-upu.
if((!(USBDCD_STATUS & 0x00400000)) || (USBDCD_STATUS & 0x00300000))
FLAG_SET(DCD_Flag,gu8InterruptFlags); // Detekcja ładowarki ukończona.

Technologie End of Life i bezpieczeństwo sieci – wyzwania Europy związane z tzw. długiem technologicznym
Najczęstsze błędy firm przy wyborze dostawcy energii i jak ich uniknąć
Fotorezystor, czyli czujnik światła dwojakiego działania. Przykład innowacji w automatyce i elektronice możliwej dzięki technologii fotooporników 



