Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Помогите разобраться с сопроцессором XGATE мотороллы MC9S12XDP512

Отправлено sway 08 мая 2008 г. 16:57


Написал тестовую простенькую программу, которая обрабатывает сигнал с входа АЦП
по прерванию усредняет сигнал и выводит среднее значение сигнала на экран ЖКИ.
Программа работает отлично. Прочитал в описании, что микропроцессор имеет встронный
сопроцессор XGATE, который имеет возможность обрабатывать сигналы прерывания переферийных
устройств. Решил попробывать обрабатывать прерывания от АЦП с помощью него, и тут
начались проблемы, при компиляции ни каких ошибок не возникает но переравание
не обрабатывается. Подскажите может я не так провожу настройку сопроцессора?????
не откажусь от примера на С или C++.
Я делаю так:

Код main.cpp:
#include <hidef.h> /* common defines and macros */
#include <mc9s12xdp512.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xdp512"

#include "xgate.h"

#define ROUTE_INTERRUPT(vec_adr, cfdata) \
INT_CFADDR= (vec_adr) & 0xF0; \
INT_CFDATA_ARR[((vec_adr) & 0x0F) >> 1]= (cfdata)

#define SOFTWARETRIGGER0_VEC 0x72// vector address= 2 * channel id
#define ADC1_VEC 0xD0 // 0x68*2=0xD0

static void SetupXGATE(void) {
// initialize the XGATE vector block and
// set the XGVBR register to its start address
XGVBR= (unsigned int)(void*__far)(XGATE_VectorTable - XGATE_VECTOR_OFFSET);

// switch software trigger 0 interrupt to XGATE
ROUTE_INTERRUPT(SOFTWARETRIGGER0_VEC, 0x81); // RQST=1 and PRIO=1
ROUTE_INTERRUPT(ADC1_VEC, 0x82);

// enable XGATE mode and interrupts
XGMCTL= 0xFBC1; // XGE | XGFRZ | XGIE

// force execution of software trigger 0 handler
XGSWT= 0x0101;
}

void main(void)
{
/* put your own code here */
DisableInterrupts;
SetupXGATE();
EnableInterrupts;
............
}

Код xgate.cxgte:

#include <hidef.h> /* common defines and macros */
#include "xgate.h"

// put your handler variables here
typedef struct {
int counter;
} MyDataType;

static MyDataType MyData= {
0
};

// interrupt handler
interrupt void SoftwareTrigger0_Handler(MyDataType* __restrict pData) {
// put your own code here
pData->counter++;
if (pData->counter > 100) {
pData->counter= 0;
}
}

//--------------------------------------------------------------------
// Analog-Digital Convertor Interrupt
//--------------------------------------------------------------------
interrupt void ADC1_int(void)
{
.......
}

// interrupt handler for all others
interrupt void ErrorHandler(void) {
asm BRK;
}
const XGATE_TableEntry XGATE_VectorTable[] = {
// Channel # = Vector address / 2
/* channel 0..8 are not used, first used must match macro XGATE_VECTOR_OFFSET in xgate.h */
{ErrorHandler, 0x09}, // Channel 09 - Reserved
.....
{ErrorHandler, 0x2F}, // Channel 2F - Reserved
{ErrorHandler, 0x30}, // Channel 30 - XSRAM20K Access Violation
{ErrorHandler, 0x31}, // Channel 31 - XGATE Software Error Interrupt
{ErrorHandler, 0x32}, // Channel 32 - XGATE Software Trigger 7
{ErrorHandler, 0x33}, // Channel 33 - XGATE Software Trigger 6
{ErrorHandler, 0x34}, // Channel 34 - XGATE Software Trigger 5
{ErrorHandler, 0x35}, // Channel 35 - XGATE Software Trigger 4
{ErrorHandler, 0x36}, // Channel 36 - XGATE Software Trigger 3
{ErrorHandler, 0x37}, // Channel 37 - XGATE Software Trigger 2
{ErrorHandler, 0x38},//Channel 38 - XGATE Software Trigger 1
{(XGATE_Function)SoftwareTrigger0_Handler, (int)&MyData}, // Channel 39 - XGATE Software Trigger 0
{ErrorHandler, 0x3A}, // Channel 3A - Periodic Interrupt Timer
.....
{ErrorHandler, 0x67}, // Channel 67 - Port J
{ADC1_int, 0x68}, // Channel 68 - ATD1
.....
{ErrorHandler, 0x79}, // Channel 79 - IRQ
};


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
что получится, если сложить 4 и 4 ?

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru