Hi team,
My customer need assistance.
I am running my code and when I enter into my while loop, I pause it and get sent into the IntDefaultHandler function. I cannot find any issues with my code. I have the same functions used (with slight modifications) in a different project and it works just fine. I am attaching the 2 C files that I am having problems with, both are similar and the image from the Debugger.
#include <stdint.h> #include <stdbool.h> #define GPIO_PORTN ((volatile uint32_t *)0x40064000) #define GPIO_PORTJ ((volatile uint32_t *)0x40060000) #define GPIO_PORTK ((volatile uint32_t *)0x40061000) #define GPIO_PORTF ((volatile uint32_t *)0x4005D000) #define SYSCTL ((volatile uint32_t *)0x400FE000) #define SysTick ((volatile uint32_t *)0xE000E000) #define SYSCTL_MOSCCTL_PWRDN (1 << 3) #define SYSCTL_MOSCCTL_NOXTAL (1 << 2) #define SYSCTL_MOSCCTL_OSCRNG (1 << 4) #define SYSCTL_RIS_MOSCPUPRIS (1 << 8) #define SYSCTL_MISC_MOSCPUMIS (1 << 8) #define SYSCTL_RSCLKCFG_OSCSRC_MOSC (3 << 20) #define SYSCTL_RSCLKCFG_PLLSRC_MOSC (3 << 24) #define SYSCTL_RSCLKCFG_NEWFREQ (1 << 30) #define SYSCTL_RSCLKCFG_PSYSDIV_M (0x3ff >> 0) #define SYSCTL_RSCLKCFG_PSYSDIV_3 3 #define SYSCTL_RSCLKCFG_USEPLL (1 << 28) #define SYSCTL_RSCLKCFG_MEMTIMU (1 << 31) #define SYSCTL_PLLFREQ0_MINT_S 0 #define SYSCTL_PLLFREQ0_MFRAC_S 10 #define SYSCTL_PLLFREQ0_PLLPWR (1 << 23) #define SYSCTL_MEMTIM0_EBCHT_M (0b1111 << 22) #define SYSCTL_MEMTIM0_EWS_M (0b1111 << 16) #define SYSCTL_MEMTIM0_EBCE (1 << 21) #define SYSCTL_MEMTIM0_FBCHT_3_5 (6 << 6) #define SYSCTL_MEMTIM0_EWS_6 (6 << 16) #define SYSCTL_MEMTIM0_FBCHT_M (0b1111 << 6) #define SYSCTL_MEMTIM0_FWS_M (0b1111 >> 0) #define SYSCTL_MEMTIM0_FBCE (1 << 5) #define SYSCTL_MEMTIM0_FWS_6 (6 >> 0) #define GPIO_PIN_0 (1 >> 0) #define GPIO_PIN_1 (1 << 1) #define GPIO_PIN_2 (1 << 2) #define GPIO_PIN_3 (1 << 3) #define GPIO_PIN_4 (1 << 4) #define GPIO_PIN_5 (1 << 5) #define GPIO_PIN_6 (1 << 6) #define GPIO_PIN_7 (1 << 7) #define LED1_PN1 GPIO_PIN_1 #define LED2_PN0 GPIO_PIN_0 #define LED3_PF4 GPIO_PIN_4 #define LED4_PF0 GPIO_PIN_0 #define SYSCTL_RCGCGPIO_PORTF (1 << 5) #define SYSCTL_RCGCGPIO_PORTJ (1 << 8) #define SYSCTL_RCGCGPIO_PORTK (1 << 9) #define SYSCTL_RCGCGPIO_PORTN (1 << 12) #define PUSH1_PJ0 GPIO_PIN_0 #define PUSH2_PJ1 GPIO_PIN_1 #define OUT_PK0 GPIO_PIN_0 #define OUT_PK1 GPIO_PIN_1 #define OUT_PK2 GPIO_PIN_2 #define OUT_PK3 GPIO_PIN_3 #define out (OUT_PK0 | OUT_PK1 | OUT_PK2 | OUT_PK3) #define IN_PK4 GPIO_PIN_4 #define IN_PK5 GPIO_PIN_5 #define IN_PK6 GPIO_PIN_6 #define IN_PK7 GPIO_PIN_7 #define in (IN_PK4 | IN_PK5 | IN_PK6 | IN_PK7) #define C 4778 #define D 4257 #define E 3792 #define G 3189 unsigned char index = 0; const unsigned char sin[48] = { 0,0,1,1,1,2,2,3,4,5,6,7,8,9,10,11,12,13,13,14,14,14,15,15, 15,15,14,14,14,13,13,12,11,10,9,8,7,6,5,4,3,2,2,1,1,1,0,0 }; enum { SYSCTL_RCGCGPIO = (0x608 >> 2), GPIO_DEN = (0x51c >> 2), GPIO_DIR = (0x400 >> 2), GPIO_PUR = (0x510 >> 2), SYSCTL_MOSCCTL = (0x07C >> 2), SYSCTL_RIS = (0x050 >> 2), SYSCTL_MISC = (0x058 >> 2), SYSCTL_RSCLKCFG = (0x0B0 >> 2), SYSCTL_PLLFREQ0 = (0x160 >> 2), SYSCTL_PLLFREQ1 = (0x164 >> 2), SYSCTL_MEMTIM0 = (0x0C0 >> 2), SYSCTL_PLLSTAT = (0x168 >> 2), STCTRL = (0x010 >> 2), STRELOAD = (0x014 >> 2), STCURRENT = (0x018 >> 2), PRI3 = (0xD20 >> 0) }; void pll(void){ uint32_t tmp; SYSCTL[SYSCTL_MOSCCTL] &= ~(SYSCTL_MOSCCTL_NOXTAL | SYSCTL_MOSCCTL_PWRDN); if (!(SYSCTL[SYSCTL_MOSCCTL] & SYSCTL_MOSCCTL_OSCRNG)){ SYSCTL[SYSCTL_MOSCCTL] |= SYSCTL_MOSCCTL_OSCRNG; while (!(SYSCTL[SYSCTL_RIS] & SYSCTL_RIS_MOSCPUPRIS)); } SYSCTL[SYSCTL_MISC] = SYSCTL_MISC_MOSCPUMIS; SYSCTL[SYSCTL_RSCLKCFG] |= SYSCTL_RSCLKCFG_OSCSRC_MOSC | SYSCTL_RSCLKCFG_PLLSRC_MOSC; SYSCTL[SYSCTL_PLLFREQ0] = (96 << SYSCTL_PLLFREQ0_MINT_S) | (0 << SYSCTL_PLLFREQ0_MFRAC_S); SYSCTL[SYSCTL_PLLFREQ1] = 4; tmp = SYSCTL[SYSCTL_MEMTIM0]; tmp &= ~(SYSCTL_MEMTIM0_EBCHT_M | SYSCTL_MEMTIM0_EWS_M | SYSCTL_MEMTIM0_EBCE); tmp |= SYSCTL_MEMTIM0_FBCHT_3_5 | SYSCTL_MEMTIM0_EWS_6; tmp &= ~(SYSCTL_MEMTIM0_FBCHT_M | SYSCTL_MEMTIM0_FWS_M | SYSCTL_MEMTIM0_FBCE); tmp |= SYSCTL_MEMTIM0_FBCHT_3_5| SYSCTL_MEMTIM0_FWS_6; SYSCTL[SYSCTL_MEMTIM0] = tmp; SYSCTL[SYSCTL_PLLFREQ0] |= SYSCTL_PLLFREQ0_PLLPWR; SYSCTL[SYSCTL_RSCLKCFG] |= SYSCTL_RSCLKCFG_NEWFREQ; while (!SYSCTL[SYSCTL_PLLSTAT]); tmp = SYSCTL[SYSCTL_RSCLKCFG]; tmp = (tmp & ~SYSCTL_RSCLKCFG_PSYSDIV_M) | SYSCTL_RSCLKCFG_PSYSDIV_3; tmp |= SYSCTL_RSCLKCFG_USEPLL | SYSCTL_RSCLKCFG_MEMTIMU; SYSCTL[SYSCTL_RSCLKCFG] = tmp; } unsigned long piano(void){ unsigned long freq; if (!GPIO_PORTK[IN_PK4]){ freq = C; GPIO_PORTN[LED1_PN1] ^= LED1_PN1; } else if(!GPIO_PORTK[IN_PK5]){ freq = D; GPIO_PORTN[LED2_PN0] ^= LED2_PN0; } else if(!GPIO_PORTK[IN_PK6]){ freq = E; GPIO_PORTF[LED3_PF4] ^= LED3_PF4; } else if(!GPIO_PORTK[IN_PK7]){ freq = G; GPIO_PORTF[LED4_PF0] ^= LED4_PF0; } else freq = 0; return freq - 1; } void DAC(unsigned long data){ if (GPIO_PORTK[in] != in) GPIO_PORTK[out] = 0; else GPIO_PORTK[out] = data; } void tone(unsigned long period){ SysTick[STRELOAD] = period; } void sysHand(void){ index = (index + 1) & 0x30; DAC(sin[index]); } void main() { pll(); SysTick[STCTRL] = 0; SysTick[STCURRENT] = 0; SysTick[PRI3] = (0x2 << 28); SysTick[STCTRL] = 0x7; SysTick[STRELOAD] = 1000000; SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTN; SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTF; SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTJ; SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTK; SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTN; SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTF; SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTJ; SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTK; GPIO_PORTN[GPIO_DIR] |= LED1_PN1; GPIO_PORTN[GPIO_DEN] |= LED1_PN1; GPIO_PORTN[GPIO_DIR] |= LED2_PN0; GPIO_PORTN[GPIO_DEN] |= LED2_PN0; GPIO_PORTF[GPIO_DIR] |= LED3_PF4; GPIO_PORTF[GPIO_DEN] |= LED3_PF4; GPIO_PORTF[GPIO_DIR] |= LED4_PF0; GPIO_PORTF[GPIO_DEN] |= LED4_PF0; GPIO_PORTJ[GPIO_PUR] |= PUSH1_PJ0 | PUSH2_PJ1; GPIO_PORTJ[GPIO_DEN] |= PUSH1_PJ0 | PUSH2_PJ1; GPIO_PORTK[GPIO_DIR] &= ~in; GPIO_PORTK[GPIO_DEN] |= in; GPIO_PORTK[GPIO_DIR] |= out; GPIO_PORTK[GPIO_DEN] |= out; while(true){ GPIO_PORTN[LED1_PN1] ^= LED1_PN1; } }
#include <stdint.h> #include <stdbool.h> #define GPIO_PORTA ((volatile uint32_t *)0x40058000) #define SYSCTL ((volatile uint32_t *)0x400fe000) #define SysTick ((volatile uint32_t *)0xE000E000) #define GPIO_PIN_3 (1 << 3) #define GPIO_PIN_4 (1 << 4) #define GPIO_PIN_5 (1 << 5) #define SYSCTL_RCGCGPIO_PORTA (1 >> 0) #define left GPIO_PIN_5 #define right GPIO_PIN_4 #define button GPIO_PIN_3 #define SYSCTL_MOSCCTL_PWRDN (1 << 3) #define SYSCTL_MOSCCTL_NOXTAL (1 << 2) #define SYSCTL_MOSCCTL_OSCRNG (1 << 4) #define SYSCTL_RIS_MOSCPUPRIS (1 << 8) #define SYSCTL_MISC_MOSCPUMIS (1 << 8) #define SYSCTL_RSCLKCFG_OSCSRC_MOSC (3 << 20) #define SYSCTL_RSCLKCFG_PLLSRC_MOSC (3 << 24) #define SYSCTL_RSCLKCFG_NEWFREQ (1 << 30) #define SYSCTL_RSCLKCFG_PSYSDIV_M (0x3ff >> 0) #define SYSCTL_RSCLKCFG_PSYSDIV_3 3 #define SYSCTL_RSCLKCFG_USEPLL (1 << 28) #define SYSCTL_RSCLKCFG_MEMTIMU (1 << 31) #define SYSCTL_PLLFREQ0_MINT_S 0 #define SYSCTL_PLLFREQ0_MFRAC_S 10 #define SYSCTL_PLLFREQ0_PLLPWR (1 << 23) #define SYSCTL_MEMTIM0_EBCHT_M (0b1111 << 22) #define SYSCTL_MEMTIM0_EWS_M (0b1111 << 16) #define SYSCTL_MEMTIM0_EBCE (1 << 21) #define SYSCTL_MEMTIM0_FBCHT_3_5 (6 << 6) #define SYSCTL_MEMTIM0_EWS_6 (6 << 16) #define SYSCTL_MEMTIM0_FBCHT_M (0b1111 << 6) #define SYSCTL_MEMTIM0_FWS_M (0b1111 >> 0) #define SYSCTL_MEMTIM0_FBCE (1 << 5) #define SYSCTL_MEMTIM0_FWS_6 (6 >> 0) #define TOGGLE_OFF 0 #define TOGGLE_ON 1 enum { SYSCTL_RCGCGPIO = (0x608 >> 2), GPIO_DEN = (0x51c >> 2), GPIO_DIR = (0x400 >> 2), SYSCTL_MOSCCTL = (0x07C >> 2), SYSCTL_RIS = (0x050 >> 2), SYSCTL_MISC = (0x058 >> 2), SYSCTL_RSCLKCFG = (0x0B0 >> 2), SYSCTL_PLLFREQ0 = (0x160 >> 2), SYSCTL_PLLFREQ1 = (0x164 >> 2), SYSCTL_MEMTIM0 = (0x0C0 >> 2), SYSCTL_PLLSTAT = (0x168 >> 2), STCTRL = (0x010 >> 2), STRELOAD = (0x014 >> 2), STCURRENT = (0x018 >> 2), PRI3 = (0xD20 >> 0) }; void pll(void){ uint32_t tmp; SYSCTL[SYSCTL_MOSCCTL] &= ~(SYSCTL_MOSCCTL_NOXTAL | SYSCTL_MOSCCTL_PWRDN); if (!(SYSCTL[SYSCTL_MOSCCTL] & SYSCTL_MOSCCTL_OSCRNG)){ SYSCTL[SYSCTL_MOSCCTL] |= SYSCTL_MOSCCTL_OSCRNG; while (!(SYSCTL[SYSCTL_RIS] & SYSCTL_RIS_MOSCPUPRIS)); } SYSCTL[SYSCTL_MISC] = SYSCTL_MISC_MOSCPUMIS; SYSCTL[SYSCTL_RSCLKCFG] |= SYSCTL_RSCLKCFG_OSCSRC_MOSC | SYSCTL_RSCLKCFG_PLLSRC_MOSC; SYSCTL[SYSCTL_PLLFREQ0] = (96 << SYSCTL_PLLFREQ0_MINT_S) | (0 << SYSCTL_PLLFREQ0_MFRAC_S); SYSCTL[SYSCTL_PLLFREQ1] = 4; tmp = SYSCTL[SYSCTL_MEMTIM0]; tmp &= ~(SYSCTL_MEMTIM0_EBCHT_M | SYSCTL_MEMTIM0_EWS_M | SYSCTL_MEMTIM0_EBCE); tmp |= SYSCTL_MEMTIM0_FBCHT_3_5 | SYSCTL_MEMTIM0_EWS_6; tmp &= ~(SYSCTL_MEMTIM0_FBCHT_M | SYSCTL_MEMTIM0_FWS_M | SYSCTL_MEMTIM0_FBCE); tmp |= SYSCTL_MEMTIM0_FBCHT_3_5| SYSCTL_MEMTIM0_FWS_6; SYSCTL[SYSCTL_MEMTIM0] = tmp; SYSCTL[SYSCTL_PLLFREQ0] |= SYSCTL_PLLFREQ0_PLLPWR; SYSCTL[SYSCTL_RSCLKCFG] |= SYSCTL_RSCLKCFG_NEWFREQ; while (!SYSCTL[SYSCTL_PLLSTAT]); tmp = SYSCTL[SYSCTL_RSCLKCFG]; tmp = (tmp & ~SYSCTL_RSCLKCFG_PSYSDIV_M) | SYSCTL_RSCLKCFG_PSYSDIV_3; tmp |= SYSCTL_RSCLKCFG_USEPLL | SYSCTL_RSCLKCFG_MEMTIMU; SYSCTL[SYSCTL_RSCLKCFG] = tmp; } struct state{ unsigned int out; unsigned int next[2]; }; typedef const struct state fsm; fsm sound[2] = { {0, {TOGGLE_OFF, TOGGLE_ON}}, {1, {TOGGLE_ON, TOGGLE_OFF}} }; unsigned int input = 0; unsigned int output = 0; unsigned int curr = TOGGLE_OFF; void sys_hand(void){ if (output == 1){ GPIO_PORTA[left] ^= left; GPIO_PORTA[right] ^= right; } else if((output == 0) && (GPIO_PORTA[button] == 0x00)){ GPIO_PORTA[left] = 0; GPIO_PORTA[right] = 0; } else{ GPIO_PORTA[left] = 0; GPIO_PORTA[right] = 0; } } void delay(unsigned int param){ unsigned int i, j; for(j = 0; j < param; j++){ for(i = 0; i < 15; i++){ } } } void edgeDetect(char param){ if (param == 'r'){ output = sound[curr].out; if (GPIO_PORTA[button] == 0){ delay(1); if (!GPIO_PORTA[button]) input = TOGGLE_ON; } else input = TOGGLE_OFF; curr = sound[curr].next[input]; } else if (param == 'f'){ output = sound[curr].out; if (!GPIO_PORTA[button]){ delay(1); if (GPIO_PORTA[button] == 0) input = TOGGLE_ON; } else input = TOGGLE_OFF; curr = sound[curr].next[input]; } } void main(void) { SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTA; SYSCTL[SYSCTL_RCGCGPIO] |= SYSCTL_RCGCGPIO_PORTA; GPIO_PORTA[GPIO_DEN] |= button; GPIO_PORTA[GPIO_DIR] &= ~button; GPIO_PORTA[GPIO_DIR] |= left; GPIO_PORTA[GPIO_DEN] |= left; GPIO_PORTA[GPIO_DIR] |= right; GPIO_PORTA[GPIO_DEN] |= right; SysTick[STCTRL] = 0; SysTick[STRELOAD] = 136363; SysTick[STCURRENT] = 0; SysTick[PRI3] = (0x2 << 28); SysTick[STCTRL] = 0x7; pll(); while(true){ edgeDetect('r'); sys_hand(); } }
Could you help look into it? Thank you for your help.