ovládání dvojité sedmisegmentovky posuvným registrem

Ahoj, dal jsem se do ovládání dvoumístné LED sedmisegmentovky pomocí Atmegy a posuvného registru 74164. Vše se mi podařilo až na jednu věc. Do registru posílám z Atmegy tři signály: hodiny, data a multiplex dvou číslic. Chtěl bych vytvořit univerzální funkci, kde nebudu muset uvnitř ní zadávat ručně port a pin, kde tyto tři signály jsou, ale rád bych je zadával do funkce v jejím volání jako proměnné.
Narazil jsem na článek, který toto popisuje:
ccrma.stanford.edu/courses/250a … _port_pass
odstavec How do I pass an IO port as a parameter to a function?
Můj kód, kde byly porty a piny natvrdo napsané funguje bezvadně a sedmisegmentovka zobrazuje zadané číslice, ale jakmile změním volání portů podle článku, AVR Studio vrací při kompilaci třikrát tuto chybu:
warning: passing argument … of ‘my_program’ makes pointer from integer without a cast
Googlil jsem, ale nejsem z toho moudrý a nevím, jak kód opravit.
Díky předem za rady.
Pavel
Můj zkrácený kód je zde:

[code]#include <avr\io.h>
#include <inttypes.h>

	#define SEG_0 0x03
	#define SEG_1 0x9F 
	// ... a další číslice
	
	uint8_t pole] = {	SEG_0,   SEG_1,   ... a další číslice };
	
	uint8_t i = 0;
	uint8_t SEG_BUF  = 0x00;
void funkce (	uint8_t cislice1, 
					uint8_t cislice2, 
					volatile uint8_t *port_clk,  uint8_t pin_clk, 
					volatile uint8_t *port_data, uint8_t pin_data, 
					volatile uint8_t *port_mpx,  uint8_t pin_mpx 
				 )
{ 
	SEG_BUF = pole[cislice1];	//naplním buffer zobrazením první číslice
	*port_mpx |= (1 << pin_mpx); 		//přepnutí na jeden segment pomocí HIGH
	for(i=0; i<8; i++) 			//smyčka bufferu pro 8 hodnot = 1 byte
	{
		*port_data = (*port_data & ~(1<<pin_data)) | ((SEG_BUF & 0b00000001) << pin_data);
		SEG_BUF = (SEG_BUF >> 1);  //rotuji SEG_BUF o jednu pozici na další zapisovanou hodnotu na jeho pozici 0
		*port_clk &= ~(1 << pin_clk); //hodiny na LOW
		*port_clk |=  (1 << pin_clk);  //hodiny na HIGH - náběžnou hranou se bit zapíše do posuvného registru
	}
    // ... a podobně pro druhou číslici
}

int main(void)
{
DDRB = 0b11111111;
PORTB = 0b11111111;
DDRC = 0b11111111;
PORTC = 0b11111111;
DDRD = 0b11111111;
PORTD = 0b11111111;

while (1)
{ 
	funkce (2,7,PORTB,0,PORTD,0,PORTC,5); 
	// na čítač posílám reprezentaci číslic 2 a 7
	// hodiny pro čítač budou na portu B pinu 0
	// data do čítače budou na portu D pinu 0
	// multiplex dvou číslic bude na portu C pinu 5
}

}[/code]

Upozorňuje, že jako argument posíláš hodnotu místo adresy.

funkce (2,7,PORTB,0,PORTD,0,PORTC,5); má být funkce (2,7,&PORTB,0,&PORTD,0,&PORTC,5); Podívej se znovu na ten odkaz.

Děkuju, po Tvé radě to funguje. Pořád semám co učit. Pavel