Did you try disabling the convert finish interrupt on the ADC channels? You could also try disabling the ADC interrupts entirely. Your code should then poll the ADC, with ADC_GetConvertResult() being a blocking call.
Did your ADC test program work as expected when interrupts was enabled?
At your first code snippet you are reading channel D
voltage = ADC_GetConvertResult(BOARD_ADC_BASEADDR, adcLogicChD);
but at the second snippet you init channel A
Also the ADC_GetConvertResult function is not blocking. It just read and return ADC register. You can either have an assert if you are using incorrect channel or it can crush.
Do you have Linux running on A cores while you run you M4 code?