16+
Воскресенье
30 апреля
Вход |Карта сайта | |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

Средства и методы разработки

 
   Новая тема Правила Регистрация Поиск »» Архив
Вернуться в конференциюТопик полностью
Молодой коллега  (24.12.2016 01:39 - 28.12.2016 19:31, просмотров: 2266)
Помогите пожалуйста макрос написать. На этапе компиляции всё известно и вроде нет преград для существования макроса. 
Вот так вот устанавливается вывод порта в "1" в tms320:
GpioDataRegs.GPASET.bit.GPIO8 = 1;
GpioDataRegs.GPBSET.bit.GPIO40 = 1;
Я хочу писать так:
#define RED_LED  8

GPIO_SET(RED_LED);
Если GPIO0 - GPIO31, то это GPASET, если GPIO32 - GPIO63, то это GPBSET. Т.е. нужно меняить номер GPIO, это я вроде сделал, а вот как менять A и B в зависимости от номера GPIO?
#define GLUE( x, y )  x ## y
#define GPIO_SET(x)		GpioDataRegs.GPASET.bit.GLUE(GPIO, x) = 1; 
________________________________________________________________________________________________________________ В итоге:
#define GLUE( x, y )  x ## y
#define GLUEE( x, y, z )  x ## y ## z
#define GLUEEE( x, y, z, a )  x ## y ## z ## a

// Port letter
#define GPIO0_PORT	A
#define GPIO1_PORT	A
#define GPIO2_PORT	A
#define GPIO3_PORT	A
#define GPIO4_PORT	A
#define GPIO5_PORT	A
#define GPIO6_PORT	A
#define GPIO7_PORT	A
#define GPIO8_PORT	A
#define GPIO9_PORT	A
#define GPIO10_PORT	A
#define GPIO11_PORT	A
#define GPIO12_PORT	A
#define GPIO13_PORT	A
#define GPIO14_PORT	A
#define GPIO15_PORT	A
#define GPIO16_PORT	A
#define GPIO17_PORT	A
#define GPIO18_PORT	A
#define GPIO19_PORT	A
#define GPIO20_PORT	A
#define GPIO21_PORT	A
#define GPIO22_PORT	A
#define GPIO23_PORT	A
#define GPIO24_PORT	A
#define GPIO25_PORT	A
#define GPIO26_PORT	A
#define GPIO27_PORT	A
#define GPIO28_PORT	A
#define GPIO29_PORT	A
#define GPIO30_PORT	A
#define GPIO31_PORT	A
#define GPIO32_PORT	B
#define GPIO33_PORT	B
#define GPIO34_PORT	B
#define GPIO35_PORT	B
#define GPIO36_PORT	B
#define GPIO37_PORT	B
#define GPIO38_PORT	B
#define GPIO39_PORT	B
#define GPIO40_PORT	B
#define GPIO41_PORT	B
#define GPIO42_PORT	B
#define GPIO43_PORT	B
#define GPIO44_PORT	B

// Port mux
#define GPIO0_MUX	1
#define GPIO1_MUX	1
#define GPIO2_MUX	1
#define GPIO3_MUX	1
#define GPIO4_MUX	1
#define GPIO5_MUX	1
#define GPIO6_MUX	1
#define GPIO7_MUX	1
#define GPIO8_MUX	1
#define GPIO9_MUX	1
#define GPIO10_MUX	1
#define GPIO11_MUX	1
#define GPIO12_MUX	1
#define GPIO13_MUX	1
#define GPIO14_MUX	1
#define GPIO15_MUX	1
#define GPIO16_MUX	2
#define GPIO17_MUX	2
#define GPIO18_MUX	2
#define GPIO19_MUX	2
#define GPIO20_MUX	2
#define GPIO21_MUX	2
#define GPIO22_MUX	2
#define GPIO23_MUX	2
#define GPIO24_MUX	2
#define GPIO25_MUX	2
#define GPIO26_MUX	2
#define GPIO27_MUX	2
#define GPIO28_MUX	2
#define GPIO29_MUX	2
#define GPIO30_MUX	2
#define GPIO31_MUX	2
#define GPIO32_MUX	1
#define GPIO33_MUX	1
#define GPIO34_MUX	1
#define GPIO35_MUX	1
#define GPIO36_MUX	1
#define GPIO37_MUX	1
#define GPIO38_MUX	1
#define GPIO39_MUX	1
#define GPIO40_MUX	1
#define GPIO41_MUX	1
#define GPIO42_MUX	1
#define GPIO43_MUX	1
#define GPIO44_MUX	1


// GPIO Multiplexing
#define _GPIO_MUX(GPION, PORT, MX)	GpioCtrlRegs.GLUEEE(GP, PORT, MUX, MX).bit.GPION = 0;
#define GPIO_MUX(GPION)			_GPIO_MUX(GPION, GLUE(GPION, _PORT), GLUE(GPION, _MUX))
// Direction out
#define _GPIO_DRO(PORT, GPION)		GpioCtrlRegs.GLUEE(GP, PORT, DIR).bit.GPION = 1;
#define GPIO_DRO(GPION)			_GPIO_DRO(GLUE(GPION, _PORT), GPION)
// Direction in
#define _GPIO_DRI(PORT, PIN)		GpioCtrlRegs.GLUEE(GP, PORT, DIR).bit.GPION = 0;
#define GPIO_DRI(GPION)			_GPIO_DRI(GLUE(GPION, _PORT), GPION)
// Set pin
#define _GPIO_SET(PORT, GPION)		GpioDataRegs.GLUEE(GP, PORT, SET).bit.GPION = 1;
#define GPIO_SET(GPION)			_GPIO_SET(GLUE(GPION, _PORT), GPION)
// Clear pin
#define _GPIO_CLR(PORT, GPION)		GpioDataRegs.GLUEE(GP, PORT, CLEAR).bit.GPION = 1;
#define GPIO_CLR(GPION)			_GPIO_CLR(GLUE(GPION, _PORT), GPION)
// Toggle pin
#define _GPIO_TGL(PORT, GPION)		GpioDataRegs.GLUEE(GP, PORT, TOGGLE).bit.GPION = 1;
#define GPIO_TGL(GPION)			_GPIO_TGL(GLUE(GPION, _PORT), GPION)
// Read pin
#define _GPIO_DAT(PORT, GPION)		(GpioDataRegs.GLUEE(GP, PORT, DAT).bit.GPION)
#define GPIO_DAT(GPION)			(_GPIO_DAT(GLUE(GPION, _PORT), GPION))
// LEDs
#define LED_RED		GPIO8
#define LED_GREEN	GPIO9


void LedInit(void)
{
   EALLOW ;

   // Enable GPIO peripheral clock
   SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;

   // Configure LED pins
   GPIO_MUX(LED_RED);
   GPIO_MUX(LED_GREEN);

   // Preinit
   GPIO_SET(LED_RED);
   GPIO_SET(LED_GREEN);

   // Dir
   GPIO_DRO(LED_RED);
   GPIO_DRO(LED_GREEN);

   EDIS ;
}

void LedRedTogle(void)
{
   GPIO_TGL(LED_RED);
}
Может сгодится кому..
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7525 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXVII