Ответ: Отрывок от поэмы "USB everywhere..." здесь:(+), Input, Output, and Mask Bits Output (AND_OR)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено PicoDev 28 марта 2004 г. 11:56
В ответ на: Ответ: Нет проблем! Если интересует приведу код, я так делаю для FX2 от Cypress. Пишу в любой регистр через USB для отладки. отправлено PicoDev 28 марта 2004 г. 04:24

**********File#1**************

#ifndef _FX2IOASM_h_
#define _FX2IOASM_h_

#include "System51.h"

void hPortAndOr(byte p, byte and, byte or);
byte hPortIn(byte p);
void hPortOut(byte p, byte d);

#endif // _FX2IOASM_h_

*********file#2 *************************
$GEN ; Enable Macro Listing
;;-----------------------------------------------------------------------------
;; File: FXIOAsm.a51
;; Contents: This file contains assembler language access to the internal resources FX chip.
;; designed by Serge Sudja
;;-----------------------------------------------------------------------------
public hPortIn, hPortOut, hAndOr
public hPortIn_port, hPortOut_port,hAndOr_and,hAndOr_or
;------------------------------------------------------------------------------
sfr Port = 0xB0;
sbit BitPort = 0xB0;
hPortIn_port EQU (hPortIn+1)
hPortOut_port EQU (hPortOut+1)
hAndOr_and EQU (hAndOr+1)
hAndOr_or EQU (hAndOr+5)

;******************************************************************************
FXIOAsm SEGMENT CODE PAGE
rseg FXIOAsm
;******************************************************************************
;byte FXPort(byte port)
; port = R7
;------------------------------------------------------------------------------
hPortIn:
MOV R7, Port
RET
;------------------------------------------------------------------------------

; R7 - data
;------------------------------------------------------------------------------
hPortOut:
MOV Port, R7
RET
;------------------------------------------------------------------------------
;hSetBit:
; SETB BitPort
; RET
;------------------------------------------------------------------------------
;hClrBit:
; CLR BitPort
; RET
;------------------------------------------------------------------------------
hAndOr:
MOV A,Port
ANL A,R7
ORL A,R5
MOV Port,A
RET
;------------------------------------------------------------------------------


example C-code
*****File#3***********************************
#include "FX2IOASM.h"

//PortIo
#define PortAddr get_bIndexL()
#define PortAnd get_bValueL()
#define PortData get_bValueL()
#define PortOr get_bValueH()
#define Cmd get_bIndexH()

//MemByte----------------------------------------
#define MemAddr get_wIndex()
#define DataByte get_bValueL()
//MemBlock---------------------------------------
#define MemAddr get_wIndex()
// data in/out EPOBUF[]

#define cmdFX2PortAndOr 2
#define cmdFX2PortInOut 1

bool VndRq_FxPort(void)
{
bool ok = 1;
switch(Cmd)
{

case cmdFX2PortInOut:
if(get_bmReqType()==c_DeviceVndIn)
{
EP0BUF[0] = hPortIn(PortAddr);
set_EP0BC(1);
}
else if(get_bmReqType()==c_DeviceVndOut)
{
hPortOut(PortAddr, PortData);
}
else
{
ok=0;
}
break;

case cmdFX2PortAndOr:
if(get_bmReqType()==c_DeviceVndOut)
{
hPortAndOr(PortAddr, PortAnd, PortOr);
}
else
{
ok=0;
}
break;

default:
ok=0;
break;
}
return ok;
}


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

Ответы



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

E-mail: info@telesys.ru