- mf624_state_t* mfstPtr = ssGetPWork(S)[0];
- real_T *y = ssGetOutputPortSignal(S,0);
- y[0] = ADC_read(mfstPtr, AD0);
+
+ int ADCChannels = ssGetIWorkValue(S, 0);
+ real_T* y[ADCChannels];
+ int i;
+ int res,res1;
+
+ if (mf624_check(S) != 0)
+ return;
+
+ // Activate trigger to start conversion
+ mf624_read16(MFST2REG(mfst, 2, ADSTART_reg));
+
+ for(i=0; i < ADCChannels;i++){
+ y[i]=ssGetOutputPortSignal(S,i);
+ }
+
+ // Check if conversion has finished
+ while((mf624_read32(MFST2REG(mfst, 0, GPIOC_reg)) & GPIOC_EOLC_mask)) {
+ for (i = 0; i < 1000; i++) {} // small wait
+ }
+
+
+ for(i=1; i < ADCChannels;i+=2){
+ res = mf624_read32(MFST2REG(mfst, 2, ADDATA0_reg));
+ res1= res >> 16;
+ res = res & 0xFFFF;
+ *y[i-1] = (real_T) (10.0 * ((int16_t) (res << 2)) / (double) 0x8000);
+ *y[i] = (real_T) (10.0 * ((int16_t) (res1 << 2)) / (double) 0x8000);
+ }
+
+ if(i == ADCChannels){
+ res = mf624_read16(MFST2REG(mfst, 2, ADDATA0_reg));
+ *y[ADCChannels-1]=(real_T)(10.0 * ((int16_t) (res << 2)) / (double) 0x8000);
+ }