GPIO Example so simple I can not see why it does not work

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

GPIO Example so simple I can not see why it does not work

ソリューションへジャンプ
3,097件の閲覧回数
w2vy
Contributor V

This example is so simple I can not see why it does not work!

It just loops reading a pin table from gpio:read and extracts the values and prints them.

They all come up as 1

 

any ideas?

 

I am running MQX 3.6 on a mcf52259demo board.

I have the gpio pins wired on J4 so I can pull the up/down and watch for changes

 

Code below... (and attached if you want to compile)

 

tom

 

/*TASK*-----------------------------------------------------------------** Function Name  : Main_task* Comments       :*    This task initializes RTCS and starts SHELL.**END------------------------------------------------------------------*/TASK_TEMPLATE_STRUCT MQX_template_list[] ={/*  Task number, Entry point, Stack, Pri, String, Auto? */   {MAIN_TASK,   Main_task,   3000,  9,   "main",        MQX_AUTO_START_TASK, 0, 50},   {0,           0,           0,     0,   0,             0, 0, 0}};#define GPIO_W1  GPIO_PORT_TA | GPIO_PIN3#define GPIO_W0  GPIO_PORT_TA | GPIO_PIN2#define GPIO_H1  GPIO_PORT_TA | GPIO_PIN1#define GPIO_H0  GPIO_PORT_TA | GPIO_PIN0#define GPIO_D7  GPIO_PORT_AN | GPIO_PIN7#define GPIO_D6  GPIO_PORT_AN | GPIO_PIN6#define GPIO_D5  GPIO_PORT_AN | GPIO_PIN5#define GPIO_D4  GPIO_PORT_AN | GPIO_PIN4#define GPIO_D3  GPIO_PORT_AN | GPIO_PIN3#define GPIO_D2  GPIO_PORT_AN | GPIO_PIN2#define GPIO_D1  GPIO_PORT_AN | GPIO_PIN1#define GPIO_D0  GPIO_PORT_AN | GPIO_PIN0#define GPIO_J16 GPIO_PORT_TC | GPIO_PIN2#define GPIO_J17 GPIO_PORT_TC | GPIO_PIN1#define GPIO_FLIP  GPIO_PORT_UC | GPIO_PIN3#define GPIO_RESET GPIO_PORT_TC | GPIO_PIN3#define GPIO_SYNC  GPIO_PORT_NQ | GPIO_PIN1MQX_FILE_PTR inputfd;static GPIO_PIN_STRUCT pins_input[] = {   GPIO_W1,   GPIO_W0,   GPIO_H1,   GPIO_H0,   GPIO_D7,   GPIO_D6,   GPIO_D5,   GPIO_D4,   GPIO_D3,   GPIO_D2,   GPIO_D1,   GPIO_D0,   GPIO_J16,   GPIO_J17,   GPIO_LIST_END};int bin_pins(GPIO_PIN_STRUCT pins[], int bits);void Main_task(uint_32 initial_data){   int w, h, J16, J17;   volatile MCF5225_STRUCT _PTR_ reg_ptr = _PSP_GET_IPSBAR();   volatile MCF5225_GPIO_STRUCT _PTR_ gpio = &reg_ptr->GPIO;   // TA0-3 Inputs   inputfd = fopen("gpio:input", (char *)&pins_input);   if (inputfd == NULL) {      printf("Error opening GPIO Files!\r\n");      _task_block();   }   printf("GPIO Opened ok\r\n");   while (1) {      w = h = 1;      if (ioctl(inputfd, GPIO_IOCTL_READ, &pins_input) == IO_OK) {         w = bin_pins(&pins_input[0], 2) + 1;         h = bin_pins(&pins_input[2], 2) + 1;         J16 = bin_pins(&pins_input[12], 1);         J17 = bin_pins(&pins_input[13], 1);      }      printf("H %d W %d J16 %d J17 %d PORTTA %x DDR %x PAR %x PORTTAP %x\r\n", h, w, J16, J17, gpio->PORTTA, gpio->DDRTA, gpio->PTAPAR, gpio->PORTTAP_SETTA);      _time_delay(1000);   }}

 

 

0 件の賞賛
返信
1 解決策
1,429件の閲覧回数
JuroV
NXP Employee
NXP Employee

In fact, your GPIO IP on the chip reads "1" from input. So the problem must be in the electrical connection.

元の投稿で解決策を見る

0 件の賞賛
返信
5 返答(返信)
1,429件の閲覧回数
w2vy
Contributor V

BTW The printf generates the following output

 

H 4 W 4 J16 1 J17 1 PORTTA f DDR 0 PAR 0 PORTTAP fH 4 W 4 J16 1 J17 1 PORTTA f DDR 0 PAR 0 PORTTAP fH 4 W 4 J16 1 J17 1 PORTTA f DDR 0 PAR 0 PORTTAP fH 4 W 4 J16 1 J17 1 PORTTA f DDR 0 PAR 0 PORTTAP f

 

DDR 0 = Outputs, PARTA = 0 GPIO, Output reg F and Pin (PORTTAP) F

 

sigh

 

I sure hope it is stupid... those are easy to fix :smileyhappy:

0 件の賞賛
返信
1,429件の閲覧回数
JuroV
NXP Employee
NXP Employee

I dont understand, Is your example already working?

If not, what does you bin_pins function do?

At the end:

DDR = 0 => inputs

 

0 件の賞賛
返信
1,429件の閲覧回数
w2vy
Contributor V

bin_pins just extracts bits from the pin table.

 

All the pins read as 1

 

when when I have the pins pulled low

 

tom

0 件の賞賛
返信
1,430件の閲覧回数
JuroV
NXP Employee
NXP Employee

In fact, your GPIO IP on the chip reads "1" from input. So the problem must be in the electrical connection.

0 件の賞賛
返信
1,429件の閲覧回数
w2vy
Contributor V

(blush)

 

It turns out the pin on J4 that I was using to pull down the other ones, was not ground.

 

Well it was a simple solution!

 

Thanks for the public embarassment!

I guess that is the price we pay for asking for help publically!

 

:smileyhappy:

0 件の賞賛
返信