Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Алексей Мусин 02 ноября 2004 г. 12:21
В ответ на: Может кто-нибудь подарить программную реализацию SPI протокола на асме для AVR (Tiny15)? отправлено Alkur 02 ноября 2004 г. 11:19


/*
*********************************************************************************************************
* ad8400
*
* Description: запись в потенциометр
*
* Arguments : d - код сопротивления между выводами W и B (AD8400)
*
* Returns : none
*
* Notes : Rwb = 10kOhm*(d/256)
*
*********************************************************************************************************
*/

void ad8400 (INT8U d)
{
INT8U i;


i = 0x80;

on(SPI_CS); /* chip select */

off(SPI_SDI); /* 2-bit address (00b) for AD8400 only */
on(SPI_CLK);
off(SPI_CLK);
on(SPI_CLK);
off(SPI_CLK); /* address latched */

do {
if (d & i)
on(SPI_SDI); /* MSB first */
else
off(SPI_SDI);
on(SPI_CLK); /* latch it */
off(SPI_CLK); /* latch it */
i >>= 1;
} while (i);

off(SPI_CS); /* chip deselect */
}

Дерганье пинами описано в хидере macros.h


#if !defined(MACROS_H)
#define MACROS_H

//port bits access macros. Original written by Ascold Volkov. Rewritten by Andy Mozzevilov
/*
//examples

#define Pin1 D,2,H
#define Pin2 C,3,L
// ^ ^ ^
// port | |
// bit \active level

void main(void)
{
direct(Pin1,O); //as output
direct(Pin2,I); //as input
driver(Pin2,PullUp); //driver(Pin2,HiZ);
on(Pin1);
if (signal(Pin2)) cpl(Pin1);
if (latch(Pin1)) { //if active level presents on Pin1 for drive something
//do something
}
}
*/

#define _setL(port,bit) port&=~(1<#define _setH(port,bit) port|=(1<#define _set(port,bit,val) _set##val(PORT##port,bit)
#define on(x) _set (x)
#define SET _setH

#define _clrL(port,bit) port|=(1<#define _clrH(port,bit) port&=~(1<#define _clr(port,bit,val) _clr##val(PORT##port,bit)
#define off(x) _clr (x)
#define CLR _clrH

#define _bitL(port,bit) (!(port&(1<#define _bitH(port,bit) (port&(1<#define _bit(port,bit,val) _bit##val(PIN##port,bit)
#define _latch(port,bit,val) _bit##val(PORT##port,bit)
#define signal(x) _bit (x)
#define latch(x) _latch (x)
#define BIT _bitH

#define _cpl(port,bit,val) port^=(1<#define __cpl(port,bit,val) PORT##port^=(1<#define cpl(x) __cpl (x)
#define CPL _cpl

#define _setO(port,bit) port|=(1<#define _setI(port,bit) port&=~(1<#define _setPullUp(port,bit) port|=(1<#define _setHiZ(port,bit) port&=~(1<#define _mode(port,bit,val,mode) _set##mode(DDR##port,bit)
#define _dmode(port,bit,val,dmode) _set##dmode(PORT##port,bit)
#define DIR(port,bit,mode) _set##mode(DDR##port,bit)
#define DRIVER(port,bit,mode) _set##mode(PORT##port,bit)
//mode = O or I
#define direct(x,mode) _mode(x,mode)
//dmode = PullUp or HiZ
#define driver(x,dmode) _dmode(x,dmode)

/*
//original macros by Ascold Volkov begin here

#define _setL(port,bit) port&=~(1<#define _setH(port,bit) port|=(1<#define _set(port,bit,val) _set##val(port,bit)
#define on(x) _set (x)
#define SET _setH

#define _clrL(port,bit) port|=(1<#define _clrH(port,bit) port&=~(1<#define _clr(port,bit,val) _clr##val(port,bit)
#define off(x) _clr (x)
#define CLR _clrH

#define _bitL(port,bit) (!(port&(1<#define _bitH(port,bit) (port&(1<#define _bit(port,bit,val) _bit##val(port,bit)
#define signal(x) _bit (x)
#define BIT _bitH

#define _cpl(port,bit,val) port^=(1<#define cpl(x) _cpl (x)
#define CPL _cpl
*/

#endif


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru