forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
dsPIC33FJ16GS504 - nevykoná přerušení od konkrétního ADC

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Microchip
 
Billy Bob Bean
Profesionál
Profesionál


Založen: 21.9.2009
Příspěvky: 257
Bydliště: OLOMOUC - BRNO

PříspěvekZaslal: 25 březen 2016, 1:12    Předmět: dsPIC33FJ16GS504 - nevykoná přerušení od konkrétního ADC Citovat

Ahoj, už nevím jak dál, takže se obracím na fórum, i když nevím jestli vůbc někdo používá tohle dsp.

Používám dsPIC33FJ16GS504 a snažím se rozchodit přerušení od ADC. Vůbec mi to nejde a odmítá jakkoli chodit. V simulátoru (MPLAB 8.92 & XC16) to nechodí, v dsPIC taky ne.

ADC mám nastaven aby pár 0 a 1 spouštěl měření od přetečení TMR1, po dokončení převodu se má vyvolat přerušení. Flagy ADCP0IF a ADCP1IF to v pohodě nastavuje a MCU odmítá skočit do přerušení. Povolené vše je, další přerušení od TMR2 (Stejná priorita) v pohodě chodí.

Nastavení ADC
kód:

ADCONbits.FORM = 0;         //Integer data format
    ADCONbits.EIE = 0;            //Early Interrupt disabled
    ADCONbits.ORDER = 0;         //Convert even channel first
    ADCONbits.SEQSAMP = 0;      //Select simultaneous sampling
    ADCONbits.ADCS = 5;         //ADC clock = FADC/6 = 120MHz / 6 = 20MHz
   

   ADCPC2 = 0b0000110000000000;      //Kanál AN10 a 11 - 8,9 vypnutý
   
   ADCPC0bits.TRGSRC0=0b01100; // PWM Generator 1 Primary Trigger Selected
   ADCPC0bits.TRGSRC1=0b01100; // PWM Generator 2 Primary Trigger Selected
   ADCPC0bits.IRQEN0 = 1;
   ADCPC0bits.IRQEN1 = 1;

   IPC27bits.ADCP0IP = 2; // Set ADC Pair 0 Interrupt Priority (Level 2)
   IFS6bits.ADCP0IF = 0; // Clear ADC Pair 0 Interrupt Flag
   IEC6bits.ADCP0IE = 1; // Enable ADC Pair 0 Interrupt
   IPC27bits.ADCP1IP = 2; // Set ADC Pair 1 Interrupt Priority (Level 2)
   IFS6bits.ADCP1IF = 0; // Clear ADC Pair 1 Interrupt Flag
   IEC6bits.ADCP1IE = 1; // Enable ADC Pair 1 Interrupt

   IPC3bits.ADIP = 2;
   IEC0bits.ADIE = 1;
   IFS0bits.ADIF = 0;
   ADCONbits.ADON = 1;


Nefunguje mi jak společné přerušení pro jakýkoli pár, tak ani individuální přerušení na konkrétní pár. Změna priority nemá na cokoli vliv, změna ADCPC0bits.IRQENx taky nemá na cokoli vliv.

Rutiny pro přerušení:
kód:

void __attribute__((interrupt, no_auto_psv)) _ADCP0Interrupt (void)
{
   int an0, an1;
   an0 = ADCBUF0; // Read AN0 conversion result
   an1 = ADCBUF1; // Read AN1 conversion result
   // Interrupt Service Routine code goes here
   IFS6bits.ADCP0IF = 0; // Clear ADC Pair 0 Interrupt Flag
   LED_UPS = 1;
}

/* Example code for ADC Pair 1 ISR*/
void __attribute__((interrupt, no_auto_psv)) _ADCP1Interrupt (void)
{
   int an2, an3;
   an2 = ADCBUF2; // Read AN2 conversion result
   an3 = ADCBUF3; // Read AN3 conversion result
   // Interrupt Service Routine code goes here
   IFS6bits.ADCP1IF = 0; // Clear ADC Pair 1 Interrupt Flag
   LED_UPS = 1;
}

void __attribute__((interrupt, no_auto_psv)) _ADCInterrupt (void)
{
   int an2, an3;
   an2 = ADCBUF2; // Read AN2 conversion result
   an3 = ADCBUF3; // Read AN3 conversion result
   // Interrupt Service Routine code goes here
   IFS0bits.ADIF = 0; // Clear ADC Pair 1 Interrupt Flag
   LED_UPS = 1;
}

Už jsem zkoušel jestli nebude reagovat na společné přerušení od kteréhokoli kanálu a nic. CPU IPL mám nastaveno na 4 - zde nemá taky na nic vliv.
Něco bych byl schopnej obejít tupým hlídáním nastavení flagu, ale potřebuji rozjet automatické měření od PWM modulu a tam jsem proste a jednoduše v prdeli.

Díky za jakýkoli rady.

_________________
Stavím UPSky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
MiloPS3
Profesionál
Profesionál


Založen: 24.12.2008
Příspěvky: 887
Bydliště: LAZNE KYNZVART

PříspěvekZaslal: 25 březen 2016, 9:42    Předmět: Citovat

cau, pravda , s dsp nedelam

v DS je seznam registru tykacijici se adc , mas je vsechny spravne nastaveny ?
samotny adc bez preruseni bezi ?
skus kouknout tady http://www.microchip.com/forums/m598503.aspx

zacit postupne od zacatku a pridavat funkce , mozna se ti pak podari presnejc lokalizovat problem... vic asi nepomuzu

_________________
PIC,ASM / C , Mplab + CCS C Compiler
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
 

 
Mahoney
Profesionál
Profesionál


Založen: 26.12.2013
Příspěvky: 107

PříspěvekZaslal: 25 březen 2016, 10:18    Předmět: Citovat

Ponoř se do listingu a zkontroluj, jestli symboly z těch ISR skutečně "sedí" na těch vektorech, kde mají podle IVT být.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Billy Bob Bean
Profesionál
Profesionál


Založen: 21.9.2009
Příspěvky: 257
Bydliště: OLOMOUC - BRNO

PříspěvekZaslal: 25 březen 2016, 10:42    Předmět: Citovat

Já jsem na to přišel. Jsem fakt roura, "zakázal" jsem si totiž přerušení.

dsPIC má 7 priorit přerušení, pro jednotlivý periferie se dá nastavit priorita v registrech IPC. Procesor ukazuje aktuální prioritu bity IPL. Z nepochopitelnýho důvodu jsem si IPL nastavil na vyšší číslo, než jsem měl prioritu od ADC, takže to proste procesor neviděl...
Takže mi aspoň si postežování si na forum rozsvítilo mozek.

_________________
Stavím UPSky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Mahoney
Profesionál
Profesionál


Založen: 26.12.2013
Příspěvky: 107

PříspěvekZaslal: 25 březen 2016, 11:10    Předmět: Citovat

Stane se... hlavně že jsi na to přišel, a super že jsi napsal čím to bylo (pro nás ostatní - chybama se člověk učí, někdy i cizíma).

Jinak je to naprostá klasika, nebo aspoň já to tak mám pořád - řešení, věc (např. nářadí), nebo obecně cokoliv objevím přesně ve chvíli, kdy vyslovím otázku, a je úplně jedno kolik času jsem předtím nad problémem strávil Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
Billy Bob Bean
Profesionál
Profesionál


Založen: 21.9.2009
Příspěvky: 257
Bydliště: OLOMOUC - BRNO

PříspěvekZaslal: 25 březen 2016, 12:31    Předmět: Citovat

Já nad tím sedím už týden... dsPIC je trošku složitější na ty první krůčky, ale jak na to člověk přijde, tak to jde. Základ je stejnej jak na PIC24 a z toho fakt uchcávám. Řadu 16F jsem totálně zavrhl a 18F používám už jen na ty úplně nejjednodušší projekty.
To velké množství vektorů přerušení fakt neskutečně zrychluje práci.

Učení se z cizích chyb je fajn, člověk aspoň nemusí ty slepý cesty prošlapávat sám.

Kdyby náhodou nějkdo chtěl poradit s dsPIC nebo PIC24, tak jsm schopen v něčem poradit.

_________________
Stavím UPSky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> Microchip Časy uváděny v GMT + 2 hodiny
 
Strana 1 z 1
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2017 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)