Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Си и VisualDSP
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
novlev
Всем доброго времени суток. Есть VisualDSP5 Update 8. Начал разбираться как на Си блекфинов программировать (на программном встроенном отладчике пробую), хотел проверить как с указателями работать. Есть 3 регистра у таймера - конфиг, период и ширина импульса, думал туда таким образом записать данные - не вышло. Может кто подскажет что не так делаю? В проекте выбран bf518.
Код
volatile unsigned short *T0 = pTIMER0_CONFIG;
int main( void )
{
    /* Begin adding your custom code here */
        *T0 = 2;
        T0 += 4;
        *T0 = 3;
        T0 += 2;
        *T0 = 4;

    return 0;
}


Регистры в которые хочу записать в хедере указаны как:
Код
/* TIMER0-7 Registers         (0xFFC00600 - 0xFFC006FF) */
#define pTIMER0_CONFIG         ((volatile unsigned short *)TIMER0_CONFIG)
#define pTIMER0_PERIOD         ((volatile unsigned long  *)TIMER0_PERIOD)
#define pTIMER0_WIDTH         ((volatile unsigned long  *)TIMER0_WIDTH)


Вроде разобрался, так работает -
Код
volatile unsigned short *T0 = pTIMER0_CONFIG;

int main( void )
{
    /* Begin adding your custom code here */
long *T1 = (long*)T0 + 2;
long *T2 = (long*)T0 + 3;

         *T0 = 2;
        *T1 = 5;
        *T2 = 6;
    return 0;
}
novlev
Еще один вопрос, а в симуляторе прерывания срабатывать должны? Например, тот же таймер0. Когда-то с ADSP-2191 работал, там не срабатывали.
aaarrr
Цитата(novlev @ Jan 13 2011, 08:28) *
Регистры в которые хочу записать в хедере указаны как:
Код
/* TIMER0-7 Registers         (0xFFC00600 - 0xFFC006FF) */
#define pTIMER0_CONFIG         ((volatile unsigned short *)TIMER0_CONFIG)
#define pTIMER0_PERIOD         ((volatile unsigned long  *)TIMER0_PERIOD)
#define pTIMER0_WIDTH         ((volatile unsigned long  *)TIMER0_WIDTH)

Так и пишите:
Код
    *pTIMER0_CONFIG = x;
    *pTIMER0_PERIOD = y;
    *pTIMER0_WIDTH = z;

Зачем еще какие-то указатели изобретать?
novlev
Цитата
Зачем еще какие-то указатели изобретать?


Чтоб одной функцией любой таймер настроить.
sigmaN
недавно для AVR сделал так:
Код
//это просто для красоты. в макросы нужно передавать просто букву A, B, C, D...
#define PORT_A A
#define PORT_B B
#define PORT_C C
#define PORT_D D


//we need it ))
#define PARAMCAT(a, b) a##b

//set pin direction as output
#define GPIO_SET_DIR_OUT(port, pin)    \
        PARAMCAT(DDR, port) |= (1 << (pin))  

//for output pins: set pin to logic high
//for input pins: turn on internal pull-up resistor
#define GPIO_SET_HIGH(port, pin)    \
        PARAMCAT(PORT, port) |= (1 << (pin))
Ну, дело ясное, что где-то там определены DDRA, DDRB... PORTA, PORTB, PORTC... Я только подставляю буковку в параметр, склеиваю строку и получаю нужное имя регистра. И никакого кода в рантайме. Может быть Вы сможете поступить таким-же образом и у себя...одним макросом любой таймер брать будете)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.