Дык а указатели в Си для чего придуманы?
Код
void FLASH_WriteWord(word Adr, word Dat)
{ word *pAdr=(word *)Adr;
_BIC_SR(GIE);
while(FCTL3&BUSY == BUSY);
FCTL3 = FWKEY;
FCTL1 = FWKEY+WRT;
*pAdr=Dat;
FCTL1 = FWKEY;
FCTL3 = FWKEY+LOCK;
_BIS_SR(GIE);
}
А еще лучше, если бы вы сразу указатель в функцию передавали, а не значение. Потому что, если случайно переменная адреса Adr будет нечетным числом, то хрен знает куда ваша Dat запишется. Точнее понятно куда, с выравниваением по четному адресу.
Лучше будет вот так.
Код
void FLASH_WriteWord(word *pAdr, word Dat)
{
...
*pAdr=Dat;
...
}