Altium教程I2C Arbitration 6A软件设计0224

合集下载

Altium教本I2C Arbitration 5A软件设计0224新

Altium教本I2C Arbitration 5A软件设计0224新

I2C Arbitration 5A 软件设计第一部分 原理图 1.1 PortSplitters.SchDoc1.2PortSplitters.H/***************************************************************************** VERSION CONTROL: @(#)tcpip.h 1.3 03/10/31**** IN PACKAGE: Embedded TCPIP**** COPYRIGHT: Copyright (c) 2002 Altium**** DESCRIPTION: TCP, UDP, ICMP, IP related functions****************************************************************************/#ifndef _TCPIP_H_#define _TCPIP_H_#include "tcpipset.h"#include "common/tcpip_global.h"// transport layer exports the global buffer#ifdef OPTION_ETHERNET#include "common/ethernet.h"#else#include "common/serial.h"#endif//**************************************************************************// supported IP version is only IP4 for now#define IP_VERSION_IP4 4// supported protocols on top of IP#define IP_PROTOCOL_ICMP 1#define IP_PROTOCOL_UDP 17#define IP_PROTOCOL_TCP 6// IP bitmask fragmentation flags// (not supported, only used when debugging to check we don't get any...)#define IP_FLAG_DF 0x4000#define IP_FLAG_MF 0x8000// ICMP type & codes for supported mesages#define ICMP_TYPE_ECHOREPLY 0x00#define ICMP_TYPE_UNREACH 0x03#define ICMP_TYPE_ECHO 0x08#define ICMP_CODE_UNREACH_PORT 0x03// TCP option for receiving window size (only option we need)#define TCP_RECVWIN_OPTION 2#define TCP_RECVWIN_OPTION_LEN 4#define TCP_DATA_MAXLEN (IP_MAXLEN - sizeof(IPHEADER) - sizeof(TCPHEADER)) //**************************************************************************typedef struct{Uint8version;Uint8service;Uint16packetlength;Uint16ident;Uint16offset;Uint8timetolive;Uint8protocol;Uint16checksum;Uint32sourceip;Uint32destip;}IPHEADER;#define IPHEADER_LEN sizeof(IPHEADER)#define IP ((IPHEADER*) IPBUF)#define IPDATA ((char*) IPBUF + IPHEADER_LEN)typedef struct{Uint8type;Uint8code;Uint16checksum;Uint16ident;Uint16sequence;}ICMPHEADER;#define ICMPHEADER_LEN sizeof(ICMPHEADER)#define ICMP ((ICMPHEADER*) (IPBUF + IPHEADER_LEN))#define ICMPDATA ((char*) (IPBUF + IPHEADER_LEN + ICMPHEADER_LEN))typedef struct{Uint16sourceport;Uint16destport;Uint32sequence;Uint32acknowledge;Uint8headerinfo;Uint8flags;Uint16window;Uint16checksum;Uint16urgent;}TCPHEADER;#define TCPHEADER_LEN sizeof(TCPHEADER)#define TCP ((TCPHEADER*) (IPBUF + IPHEADER_LEN))#define TCPDATA ((char*) (IPBUF + IPHEADER_LEN + TCPHEADER_LEN))typedef struct{Uint16sourceport;Uint16destport;Uint16length;Uint16checksum;}UDPHEADER;#define UDPHEADER_LEN sizeof(UDPHEADER)#define UDP ((UDPHEADER*) (IPBUF + IPHEADER_LEN))#define UDPDATA ((char*) (IPBUF + IPHEADER_LEN + UDPHEADER_LEN))//**************************************************************************extern void tcpip_init(void);extern void tcp_resetall(void);extern void tcp_timertick(void);extern Uint8tcp_retries(void);extern Uint16ip_process(void);#ifdef OPTION_IP_ROUTINGextern Uint16 ip_routing(void);#endifextern char *ip_create(Uint32destip);#ifdef OPTION_UDPextern Uint16udp_sendprep(Uint16 ip_datalength);extern void udp_create(Uint16sourceport, Uint16destport);#endif#ifdef DEBUG_TCPextern void tcp_sessionstatus(void);#endif//************************************************************************** #endif。

Altium简明教程

Altium简明教程

在添加元件后通常要设定元件的编号和属性,方法有:1.在需要编辑属性的元件上单击右键,选择“Properties”。

2.双击需要编辑属性的元件。

3.在放置元件的同时按“Tab”键。

4.在“Preferences”对话框的“Graphical Editing”选项卡勾选“Double Click Run Inspect”项,在双击元件时会打开如图所示的“Inspector”对话框。

用户可在“Inspector”对话框的“Component Designator”栏内修改元件的编号。

5.如果用户在“Preferences”对话框的“Schematic”选项卡中勾选了“Enable In-PlaceEditing“项,直接在元件的编号处单击鼠标,将编号文字转为可编辑状态,就可以编辑元件的编号了。

布置导线在原理图绘制的过程中,可以使用导线将电气关系上相连的两个点连接起来。

(1)单击“Wring”工具栏中的工具按钮,或者选择主菜单中的“Place” “Wire”命令。

光标自动变成“十”字形,表示系统处于放置导线状态。

光标的具体形状与“Document Option”中的设置有关。

(2)将光标移动到欲放置导线的起点位置(一般是元件的引脚),若设置了电气栅格后,系统会自动定位到光标附近的原理图设计是指,在计算机辅助设计平台上使用原理图来表达设计者设计意图的的过程。

对于电子设计工程师来说,绘制电路原理图的主要目的是获得电路逻辑上的一种结构模型,以便于检验该设计和指导生产。

2.1DXP Schematic Editor简介DXP Schematic Editor是Protel DXP 20004的前端输入模块,用以辅助用户完成PCB板级项目设计和FPGA项目设计的前端输入工作。

用户可以在DXP Schematic Editor环境中制作、编辑、检查和打印设计项目的原理图纸。

DXP Schematic Editor特性1.层次化的设计结构DXP Schematic Editor的原理图编辑器支持由上至下的层次设计方法和多图纸的设计,项目文档由项目管理器管理,层次结构清晰明确,便于优化设计结构。

Altium教程IO软件设计4

Altium教程IO软件设计4

IO - Digital IO - TSK165B 软件设计第一部分 原理图1.1 FPGA_165B_DigitalIO.SchDoc1.2TxetMain.PASUnit Form;InterfaceUsesWindows,System,StrUtils,Registry,Messages,StrUtils,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,Utility;{..........................................................................................................} TypeTAutoTester = Class(TForm)TabControl1 : TTabControl;EditBox : TEdit;Panel1 : TPanel;ProgressBar : TProgressBar;Panel2 : TPanel;Button_Go : TButton;TabControl1 : TTabControl;Memo_LogFile : TMemo;Button_Close : TButton;Panel_MemoTop : TPanel;Panel_MemoLeft : TPanel;Panel_ScrollBar : TPanel;PageControl1 : TPageControl;TabSheet1 : TTabSheet;TabSheet2 : TTabSheet;Panel3 : TPanel;Panel2 : TPanel;Panel5 : TPanel;Panel6 : TPanel;Panel4 : TPanel;RichEdit1 : TRichEdit;Panel1 : TPanel;Memo_LogFile : TMemo;Procedure AutoTesterShow (Sender : TObject);Procedure Button_GoClick (Sender : TObject);Procedure Button_CloseClick (Sender : TObject);Procedure AutoTesterMouseDown(Sender : TObject; Button : TMouseButton; Shift : TShiftState; X, Y: Integer);Procedure AutoTesterMouseUp (Sender : TObject; Button : TMouseButton; Shift : TShiftState; X, Y : Integer);Procedure AutoTesterMouseMove(Sender : TObject; Shift : TShiftState; X, Y : Integer); PublicPrivateFDeviceLink : Pointer;FDragging : Boolean;FLastX : Integer;FLastY : Integer;End; {..........................................................................................................}ConstkWindowsDrive = 'C:\';kPassedReport = 'Nanoboard IO Passed Project.txt';kFailedReport = 'Nanoboard IO Failed Project.txt';kCommentLine ='{............................................................................................................................}'; kBlankLine = '';VarAutoTester: TAutoTester; {..........................................................................................................}ImplementationFunction SoftDeviceCount: Integer; Forward;Function ProjectPath : String ; Forward;Function RunFPGAFlow (Project : String ): Boolean; Forward;Function DownloadToFPGA (Project : String ): Boolean; Forward;Function ProjectPassed (Project : String ): Boolean; Forward;Function ReadIOValues (ValueList: TStringList): Boolean; Forward;Function GetDeviceName (AIndex : Integer ): String ; Forward;Function GetDeviceDescription(AIndex : Integer) : String ; Forward;Procedure SetupForTesting; Forward;Procedure ResetProcessor; Forward;Procedure CloseEverything; Forward;Procedure SaveAll; Forward;Procedure TestNanoBoardIOProjects; Forward;Procedure OpenDevicesPage; Forward;Procedure ShowOutputPanel; Forward;Procedure WriteReportHeaders; Forward;Procedure FinaliseTesting; Forward;Procedure ShowAllInstruments; Forward;Procedure CloseProjectTree (ProjectName : String ); Forward;Procedure ProjectUnderTest (ProjectName : String ); Forward;Function OpenProject (ProjectName : String ); Forward;Procedure ShowInstrument (AIndex : Integer ); Forward;Procedure ShowProgressForm (ProgressMessage: String ; StepProgress : Boolean = True); Forward;Procedure SaveReport (TempReportName : String ; CurrentProject : String ); Forward;Function ReadValueFromDevice (ChannelNo : Integer; DeviceNo : Integer): LongWord; Forward;Procedure WriteSectionHeader (Var Report : StringList ; CurrentProject : String ); Forward;Procedure WriteReportFooter (Var Report : StringList ; CurrentProject : String ); Forward;Procedure WriteReportSection ( Project : String;Report : String;Operation : String); Forward;{..........................................................................................................} {$R *.DFM} {..........................................................................................................} Procedure TestNanoBoardIOProjects;VarValueList: TStringList;BeginValueList := TStringList.Create;ValueList.LoadFromFile(ProjectPath + 'Scripts\ValueList.txt');SetupForTesting;WriteReportHeaders;OpenDevicesPage;ProjectUnderTest(ProjectPath);If RunFPGAFlow(ProjectPath) Then WriteReportSection(ProjectPath, kPassedReport, 'Run FPGA Flow')Else WriteReportSection(ProjectPath, kFailedReport, 'Run FPGA Flow');If DownloadToFPGA(ProjectPath) Then WriteReportSection(ProjectPath, kPassedReport, 'Download To FPGA')Else WriteReportSection(ProjectPath, kFailedReport, 'Download To FPGA');ShowAllInstruments;If ReadIOValues(ValueList) Then WriteReportSection(ProjectPath, kPassedReport, 'IO Test')Else WriteReportSection(ProjectPath, kFailedReport, 'IO Test');ShowProgressForm('');ShowProgressForm('Finalising testing for Nanoboard IO Projects');FinaliseTesting;End; {..........................................................................................................}{..........................................................................................................} Procedure WriteReportSection(Project : String; Report : String; Operation : String);VarList : TStringList;BeginList := TStringList.Create;If FileExists(ProjectPath + Report) ThenList.LoadFromFile(ProjectPath + Report);WriteSectionHeader(List, Project);If AnsiCompareText(Report, 'Passed') Then List.Add(Operation + ' ' + Project + ' Passed')Else List.Add(Operation + ' ' + Project + ' Failed');ShowProgressForm('');ShowProgressForm('Creating report for project: ' + Project);List.SaveToFile(ProjectPath + Report);List.Free;End; {..........................................................................................................}{..........................................................................................................} Function RunFPGAFlow(Project : String): Boolean;VarNexusWorkBench,DeviceLink,ProcessFlow;BeginResult := False;NexusWorkBench := GetNexusWorkbench;DeviceLink := NexusWorkBench.GetCurrentHardDevice;ProcessFlow := DeviceLink.ProcessFlow;ShowProgressForm('Running FPGA Flow: ' + Project);If ProcessFlow.RunAll(NexusWorkBench) = 3 Then Result := True;SaveAll;End; {..........................................................................................................}{..........................................................................................................} Function DownloadToFPGA(Project : String): Boolean;VarNexusWorkBench,DeviceLink,DownloadFlow;BeginResult := False;NexusWorkBench := GetNexusWorkbench;DeviceLink := NexusWorkBench.GetCurrentHardDevice;DownloadFlow := DeviceLink.DownloadFlow;ShowProgressForm('Downloading To FPGA: ' + Project);If DownloadFlow.RunAll(NexusWorkBench) = 3 Then Result := True;SaveAll;End; {..........................................................................................................}{..........................................................................................................}Procedure ResetProcessor;VarNexusWorkBench : INexusWorkbench;NexusDevice : INexusDevice;DeviceLink : IDeviceLink;ProcessorRegister : IProcessorRegister;BeginNexusWorkBench := GetNexusWorkbench;DeviceLink := NexusWorkBench.GetCurrentHardDevice;NexusDevice := DeviceLink.GetNexusDevice;NexusDevice.ResetDevice;End; {..........................................................................................................}{..........................................................................................................} Function ReadValueFromDevice(ChannelNo : Integer; DeviceNo: Integer): LongWord;VarNexusWorkBench : INexusWorkbench;NexusDevice : INexusDevice;DeviceLink : IDeviceLink;ProcessorRegister : IProcessorRegister;BeginResult := 0;NexusWorkBench := GetNexusWorkbench;DeviceLink := NexusWorkBench.GetSoftDevice(DeviceNo);NexusDevice := DeviceLink.GetNexusDevice;ProcessorRegister := NexusDevice.GetProcessorRegister(ChannelNo);If ProcessorRegister <> Nil ThenBeginTryNexusDevice.TemporarySuspend;Result := ProcessorRegister.GetValue;NexusDevice.ContinueFromTemporarySuspend; //If the device is a processor then reading this value will pause the device FinallyEnd;End;End; {..........................................................................................................}{..........................................................................................................}Function SoftDeviceCount : Integer;VarNexusWorkBench : INexusWorkbench;BeginNexusWorkBench := GetNexusWorkbench;If NexusWorkBench.GetSoftDeviceCount > 0 Then Result := NexusWorkBench.GetSoftDeviceCountElse Result := 0;End; {..........................................................................................................}{..........................................................................................................}Procedure ShowOutputPanel;BeginResetParameters;AddStringParameter('ObjectKind','Panel');AddStringParameter('Index','4');AddStringParameter('Category','4');AddStringParameter('Action','Hide');RunProcess('Client:ViewToolsMenu');ResetParameters;AddStringParameter('ObjectKind','Panel');AddStringParameter('Index','6');AddStringParameter('Category','4');AddStringParameter('Action','Show');RunProcess('Client:ViewToolsMenu');End; {..........................................................................................................}{..........................................................................................................} Procedure SetupForTesting;BeginMemo_LogFile.Lines.Clear;ProgressBar.Max := 8;DeleteFile(ProjectPath + 'Nanoboard IO Passed Projects Report.txt');DeleteFile(ProjectPath + 'Nanoboard IO Failed Projects Report.txt');ShowProgressForm('Starting testing...');End; {..........................................................................................................}{..........................................................................................................} Procedure ShowProgressForm(ProgressMessage: String; StepProgress : Boolean = True);BeginMemo_LogFile.Lines.Add(ProgressMessage);If StepProgress Then ProgressBar.Position := ProgressBar.Position + 1;Memo_LogFile.Lines.SaveToFile(ProjectPath + 'Comparison Log.txt');AutoTester.Show;AutoTester.Repaint;End; {..........................................................................................................}{..........................................................................................................} Procedure SaveReport(TempReportName : String; CurrentProject : String);VarMainReport : TStringList;TempReport : TStringList;i : Integer;MainReportName : String;BeginMainReport := TStringList.Create;TempReport := TStringList.Create;If ProjectPassed(TempReportName) Then MainReportName := ProjectPath + 'Passed Projects Report.txt'Else MainReportName := ProjectPath + 'Failed Projects Report.txt';If FileExists(TempReportName) Then TempReport.LoadFromFile(TempReportName);If FileExists(MainReportName) Then MainReport.LoadFromFile(MainReportName);WriteSectionHeader(MainReport, CurrentProject);For i := 0 To TempReport.Count -1 DoBeginMainReport.Add(TempReport.Strings[i]);End;WriteReportFooter(MainReport, CurrentProject);MainReport.SaveToFile(MainReportName);End; {..........................................................................................................}{..........................................................................................................} Function ProjectPassed(Project : String): Boolean;BeginResult := True;If FileExists(Project) ThenBeginResult := False;EndEnd; {..........................................................................................................}{..........................................................................................................} Procedure WriteSectionHeader(Var Report : StringList; CurrentProject : String);BeginReport.Add(kCommentLine);Report.Add(kBlankLine);Report.Add(kCommentLine);Report.Add(CurrentProject);End; {..........................................................................................................}{..........................................................................................................} Procedure WriteReportHeaders;VarReport : TStringList;BeginReport := TStringList.Create;If Not FileExists(ProjectPath + kPassedReport) ThenBeginReport.Add('Nanoboard IO Passed Projects');Report.Add('The following Nanoboard project(s) were successfully tested:');Report.SaveToFile(ProjectPath + kPassedReport);End;Report.Clear;If Not FileExists(ProjectPath + kFailedReport) ThenBeginReport.Add('Nanoboard IO Failed Projects');Report.Add('The following Nanoboard project(s) failed testing:');Report.SaveToFile(ProjectPath + kFailedReport);End;Report.Free;End; {..........................................................................................................}{..........................................................................................................} Procedure WriteReportFooter(Var Report : StringList; CurrentProject : String);BeginReport.Add(kCommentLine);Report.Add(kBlankLine );Report.Add(kCommentLine);End; {..........................................................................................................}{..........................................................................................................} Procedure OpenProject(ProjectName : String);BeginResult := True;If Not FileExists(ProjectName) Then Result := False;ResetParameters;AddStringParameter('ObjectKind','Project');AddStringParameter('FileName', ProjectName);RunProcess('WorkspaceManager:OpenObject');End; {..........................................................................................................}{..........................................................................................................} Procedure SaveAll;BeginResetParameters;AddStringParameter('ObjectKind','All');RunProcess('WorkspaceManager:SaveObject');End; {..........................................................................................................}{..........................................................................................................} Procedure TAutoTester.Button_GoClick (Sender : TObject);BeginTestNanoBoardIOProjects;End; {..........................................................................................................}{..........................................................................................................} Procedure CloseEverything;BeginResetParameters;AddStringParameter('ObjectKind','All');RunProcess('WorkspaceManager:CloseObject');End; {..........................................................................................................}{..........................................................................................................} Procedure CloseProjectTree(ProjectName : String);BeginResetParameters;AddStringParameter('ObjectKind','FocusedProjectTree');RunProcess('WorkspaceManager:CloseObject');End; {..........................................................................................................}{..........................................................................................................} Procedure TAutoTester.Button_CloseClick(Sender: TObject);BeginClose;End; {..........................................................................................................}{..........................................................................................................} Procedure TAutoTester.AutoTesterMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Begin//Allows form to be moved by clicking anywhere on the formFDragging := True;FLastx := Mouse.CursorPos.X;FLastY := Mouse.CursorPos.Y;End; {..........................................................................................................}{..........................................................................................................} Procedure TAutoTester.AutoTesterMouseMove (Sender : TObject; Shift : TShiftState; X, Y : Integer);Begin//Allows form to be moved by clicking anywhere on the formIf Not FDragging Then Exit;AutoTester.Left := AutoTester.Left + (Mouse.CursorPos.X - FLastX);AutoTester.Top := AutoTester.Top + (Mouse.CursorPos.Y - FLastY);FLastx := Mouse.CursorPos.X;FLastY := Mouse.CursorPos.Y;End; {..........................................................................................................}{..........................................................................................................}Procedure TAutoTester.AutoTesterMouseUp (Sender : TObject; Button : TMouseButton; Shift : TShiftState; X, Y : Integer); Begin//Allows form to be moved by clicking anywhere on the formFDragging := False;End; {..........................................................................................................}{..........................................................................................................}Procedure OpenDevicesPage;BeginResetParameters;AddStringParameter('ObjectKind','ControlPanel');AddStringParameter('Index', '1');RunProcess('WorkspaceManager:OpenObject');End; {..........................................................................................................}{..........................................................................................................}Procedure FinaliseTesting;BeginShowProgressForm('Testing complete.');ProgressBar.Position := 0;End; {..........................................................................................................}{..........................................................................................................}Procedure ProjectUnderTest(ProjectName : String);VarList : TStringList;BeginList := TStringList.Create;List.Add(ProjectName);List.SaveToFile(ProjectPath + 'ProjectUnderTest.txt');List.Free;End; {..........................................................................................................}{..........................................................................................................} Function GetDeviceName(AIndex : Integer) : String;VarNexusWorkBench : INexusWorkbench;DeviceLink : IDeviceLink;BeginNexusWorkBench := GetNexusWorkbench;DeviceLink := NexusWorkBench.GetSoftDevice(AIndex);Result := DeviceLink.GetDeviceName;End; {..........................................................................................................}{..........................................................................................................} Function GetDeviceDescription(AIndex : Integer) : String;VarNexusWorkBench : INexusWorkbench;DeviceLink : IDeviceLink;BeginNexusWorkBench := GetNexusWorkbench;DeviceLink := NexusWorkBench.GetSoftDevice(AIndex);Result := DeviceLink.GetShortDescription;End; {..........................................................................................................}{..........................................................................................................} Function DeviceDesignator(AIndex : Integer) : String;VarNexusWorkBench : INexusWorkbench;DeviceLink : IDeviceLink;NexusCore : INexusCore;BeginNexusWorkBench := GetNexusWorkbench;DeviceLink := NexusWorkBench.GetSoftDevice(AIndex);NexusCore := DeviceLink.GetNexusCore;Result := NexusCore.GetComponentDesignator;End; {..........................................................................................................}{..........................................................................................................} Function ReadIOValues(ValueList : TStringList) : Boolean;Vari : Integer;j : Integer;AValue : Integer;DeviceValue : Integer;ValueString : String;BeginResult := True;j := SoftDeviceCount;For j := 0 To SoftDeviceCount -1 DoBeginIf Pos( 'TESTID', UpperCase(DeviceDesignator(j))) <> 0 ThenBeginFor i := 0 To 2 DoBeginBeginAValue := StrToInt(ValueList[0]);ValueList.Delete(0);ShowProgressForm('Reading From Soft Device ' + GetDeviceDescription(j) + ' - Channel ' + IntToStr(i) + ': ');DeviceValue := ReadValueFromDevice(i, j);If Not SameText(IntToHex(DeviceValue, 2), IntToHex(AValue, 2)) ThenBeginShowProgressForm('Value = ' + IntToHex(ReadValueFromDevice(i, j), 2));ShowProgressForm('This does not match the predetermined value of ' + IntToHex(AValue, 2) + '. Test Failed.'); Result := False;EndElseBeginShowProgressForm('Value = ' + IntToHex(ReadValueFromDevice(i, j), 2));ShowProgressForm('This matches the predetermined value of ' + IntToHex(AValue, 2) + '. Test Passed.');End;ShowProgressForm(kCommentLine);ShowProgressForm(kBlankLine );ShowProgressForm(kCommentLine);End;End;End;End;End; {..........................................................................................................}{..........................................................................................................} Function ProjectPath : String;VarWorkspace : IWorkspace;Project : IProject;BeginWorkspace := GetWorkspace;Project := Workspace.DM_FocusedProject;Result := ExtractFilePath(Project.DM_ProjectFullPath);End; {..........................................................................................................}{..........................................................................................................} Procedure ShowInstrument(AIndex : Integer);BeginResetParameters;AddStringParameter('Target', 'SoftDevice' );AddStringParameter('Action', 'ShowViewer' );AddStringParameter('Index' , IntToStr(AIndex));RunProcess('FPGAFlow:DeviceAction');End;{..........................................................................................................}{..........................................................................................................} Procedure ShowAllInstruments;Vari : Integer;BeginFor i := 0 To SoftDeviceCount -1 DoBeginShowInstrument(i);End;End; {..........................................................................................................}{..........................................................................................................} End.1.3DigitalIO.asm ;................................................................................section Data, DataMainCountLow.dsb 1MainCountHigh.dsb 1CountInner.dsb 1CountOuter.dsb 1;................................................................................section Text, Code, inpage.global__start__start:GOTO MainProc;............................................................................... MainProc: ;...............................................................................CLRF MainCountLowCLRF MainCountHighCLRWTRIS PORTA; Set Port A as outputTRIS PORTB; Set Port B as OutputTRIS PORTC; Set Port C as outputMOVLW 27HMOVWF PORTAMOVLW 19HMOVWF PORTBMOVLW 49HMOVWF PORTCMainLoop:GOTO MainLoop ;................................................................................END1.4DigitalIO.asm ;................................................................................section Data, DataMainCountLow.dsb 1MainCountHigh.dsb 1CountInner.dsb 1CountOuter.dsb 1;................................................................................section Text, Code, inpage.global__start__start:GOTO MainProc;............................................................................... MainProc: ;...............................................................................CLRF MainCountLowCLRF MainCountHighCLRWTRIS PORTA; Set Port A as outputTRIS PORTB; Set Port B as OutputTRIS PORTC; Set Port C as outputMOVLW 17HMOVWF PORTAMOVLW 29HMOVWF PORTBMOVLW 59HMOVWF PORTCMainLoop:GOTO MainLoop ;................................................................................END。

Altium Designer6 电路设计教程 第1章 Altium Designer6 简介

Altium Designer6 电路设计教程 第1章  Altium Designer6 简介

Altium Designer6电路设计实用教程
五、工作面板:
(3) 仿真开发环境:
Altium Designer6电路设计实用教程
五、工作面板:
(4) VHDL编辑环境:
Altium Designer6电路设计实用教程
五、工作面板:
软件的工作面板和窗口与Protel软件的以前版本有 较大的不同,对其管理也有特别的操作方法。 熟练掌握工作面板和窗口的管理能够大大提高电 路设计的效率。 工作面板是最新特色,在设计工程中十分常用, 通过它用户可以方便的操作文件和查看信息。 还可以大大的提高编辑的效率。通过单击屏幕右 下角的面板标签可以选择所要显示的工作面板。
•1998年Protel公司推出了Protel 98,它是32位的EDA软件
•1999年推出了Protel 99 •2000年推出了Protel 99SE
•2002年下半年推出了令人期待的最新产品Protel DXP
•目前较新版本Altium Designer 6.x
Altium Designer6电路设计实用教程
Altium Designer6电路设计实用教程
二、软件发展回顾
•1988年,美国的ACCEL Technologies inc公司推出了世界上第 一个电子线路自动化设计软件——TANGO软件包
•进入20世纪90年代,Protel Technology公司及时推出了基于 Windows的Protel软件——Protel for Windows 1.0版 •1994年推出了Protel for Windows 2.0版 •1997年推出了Protel for Windows 3.0版
Altium Designer6电路设计实用教程

altiumdesigner使用教程

altiumdesigner使用教程

设计并生成PCB根据WEBENCH生成的电源原理图,就可以在AltiumDesigner中画出设计电路的原理图和PCB 图。

1.Ultra Librarian 的安装和使用1) 在TI官网下载并安装UIltral Librarian并安装,下载地址:2) 在TI官网找到要使用的芯片,在“符号和封装”项目下点击下载CAD文件(后缀为.bxl),如下图所示:3) 打开Ultral Librarian软件,首先点击“Load Data”装载刚刚下载.bxl文件,在选择"SelectTools”中的"Altium Designer”,最后点击“Export toSelected Tools”。

如下图所示:田PatemViem. TQFP.[区留Utrs Lbrarin Binsy Readsr Vericn 5.3.409stup t,Suocta ile to Load.Load Data Doy nload from websites and databasesStep 2, 50lectToolsAcoel15/FCAD20X/MimD=spe! C m 2 0 E 口 CadncaAkgo 14-151CadenceAego 15.2d1 n298G e160 C160 MmirExedicn39 ·2000gm CDX G 0CQnadCalre CI5 VS0 meAl Qrcad L4otV9crneu,MrloPAOS/PeMelggc4crnemm304C207Zu Cadt2Vasn34 Z4eCR5000 eiese|留SymbeNicm PC2.[NtHptop-3.EportocadTools Export to Selected ToolsBenefis Opions- 听i o n s / H e p txit Programof Upgrading4) 随后会生成一个.txt 文档,如下图所示。

Altium教程CAN_Receive 6A软件设计0223

Altium教程CAN_Receive 6A软件设计0223

CAN_Receive 6A软件设计02231.2CAN_Receiver_2.ASMDoSetFrameToTransmit:SFTT_RPT_Test_Not_Can_Tx:GetCANReg STATUS_REGISTERBTFSS CANCommand, Bit2; check the Transmit Buffer status bitGOTO SFTT_RPT_Test_Not_Can_TxSetCANReg TRANSMIT_BUFFER_REGISTER_ACR0, 0x03SetCANReg TRANSMIT_BUFFER_REGISTER_ACR1, 0x55SetCANReg TRANSMIT_BUFFER_REGISTER_ACR2, 0x00SetCANRegSameValue TRANSMIT_BUFFER_REGISTER_ACR3; now set the transmit buffer to hold the value to outputSetCANRegFromMemory TRANSMIT_BUFFER_REGISTER_AMR0, MainCountSetCANReg TRANSMIT_BUFFER_REGISTER_AMR1, 0x00SetCANRegSameValue TRANSMIT_BUFFER_REGISTER_AMR2SetCANRegSameValue TRANSMIT_BUFFER_REGISTER_AMR3SetCANRegSameValue TRANSMIT_BUFFER_REGISTER_0SetCANRegSameValue TRANSMIT_BUFFER_REGISTER_1SetCANRegSameValue TRANSMIT_BUFFER_REGISTER_2RETLW 0 ;...............................................................................;............................................................................... DoTransmitFrame:; Setting Bit 0 in the Command register tells the CAN to transmit the; contents of its transmit bufferSetCANReg COMMAND_REGISTER, 0x01RETLW 0;...............................................................................DoReceiveFrame:GetCANReg INTERRUPT_REGISTERBTFSS CANCommand, Bit0; check the Receive Interrupt bit - if it's set, we need to read from the FIFO GOTO CheckBufferClearReadReceivedData:; if receive interrupt active; read data from receive buffer and put data1 into CANReceivedData registerGetCANReg ACCEPTANCE_CODE1_REGISTERMOVF CANCommand, WXORLW 0x55.gen IF <NOT> WGetCANReg RECEIVE_BUFFER_REGISTER_AMR0MOVF CANCommand, WMOVWF CANReceivedData.gen ENDIF; release receive bufferSetCANReg COMMAND_REGISTER, 0x04CheckBufferClear:GetCANReg STATUS_REGISTERBTFSC CANCommand, Bit0; no more data to readGOTO ReadReceivedDataRETLW 0;............................................................................... ; Given a register address in 'CANRegister' and a command to be written to; that address in 'CANCommand' this function will send the command to the CAN. ;............................................................................... DoCANSetRegister:MOVLW PortAsOutputTRIS CAN_ADDRESS_PORTMOVF CANRegister, WMOVWF CAN_ADDRESS_PORTMOVLW PortAsOutputTRIS CAN_CTRL_PORTBCF CAN_CTRL_PORT, CAN_ADDRESS_LATCH_ENABLE_BIT; latch the addressBSF CAN_CTRL_PORT, CAN_SELECT_BITMOVLW PortAsOutputTRIS CAN_COMMAND_PORTMOVF CANCommand, WMOVWF CAN_COMMAND_PORTMOVLW PortAsOutputTRIS CAN_CTRL_PORTBSF CAN_CTRL_PORT, CAN_WRITE_BITMOVLW PortAsOutputTRIS CAN_CTRL_PORTMOVLW CAN_RESETMOVWF CAN_CTRL_PORT; reset all control linesRETLW 0 ;...............................................................................;............................................................................... ; Given a register address in 'CANRegister' the value is read from that register ; into 'CANCommand' ;............................................................................... DoCANGetRegister:MOVLW PortAsOutputTRIS CAN_ADDRESS_PORTMOVF CANRegister, WMOVWF CAN_ADDRESS_PORTMOVLW PortAsOutputTRIS CAN_CTRL_PORTBCF CAN_CTRL_PORT, CAN_ADDRESS_LATCH_ENABLE_BIT; latch the address constant BSF CAN_CTRL_PORT, CAN_SELECT_BITBSF CAN_CTRL_PORT, CAN_READ_BITMOVLW PortAsInputTRIS CAN_COMMAND_PORTMOVF CAN_COMMAND_PORT, WMOVWF CANCommand; store resultMOVLW PortAsOutputTRIS CAN_CTRL_PORTMOVLW CAN_RESETMOVWF CAN_CTRL_PORT; reset all control linesRETLW 0 ;...............................................................................;............................................................................... ; Clears LCD Screen ;............................................................................... DoLCDClearScreen:MOVLW 0x01MOVWF FirstLineCALL LCDClearScreenCore; clear first lineMOVLW 0x00MOVWF FirstLineCALL LCDClearScreenCore; clear second lineRETLW 0DoLCDClearScreenCore:.gen FOR LoopCounter = #0 TO #16MOVLW' 'MOVWF CharacterToDisplayMOVF LoopCounter, WMOVWF LinePositionCALL LCDSendCharacter.gen ENDFORRETLW 0 ;...............................................................................;............................................................................... ; Sends the character in 'CharacterToDisplay' to the LCD; at address 'LinePosition', on a line determined by the; 'FirstLine' boolean.DoLCDSendCharacter:CALL LCDWaitTillReadyMOVLW PortAsOutputTRIS LCD_DATA_PORTMOVF CharacterToDisplay, WMOVWF LCD_DATA_PORT; output the character on the data linesMOVLW PortAsOutputTRIS LCD_CTRL_PORTMOVF LinePosition, WANDLW LCD_LINE_ONBTFSS FirstLine, Bit0; the next line turns on the 'line' bit if this isn't the first line IORLW LCD_LINE_OFFIORLW LCD_STROBE_OFFMOVWF LCD_CTRL_PORTANDLW LCD_STROBE_ONMOVWF LCD_CTRL_PORTMOVF LinePosition, WMOVLW 0xFFMOVWF LCD_CTRL_PORTRETLW 0 ;...............................................................................;...............................................................................; Doesn't return until the LCD is readyDoLCDWaitTillReady:MOVLW PortAsInputTRIS LCD_CTRL_PORT; Set Port To Inputs.gen REPEAT.gen UNTIL LCD_BUSY; Check Busy flag, if High (Busy) then try againRETLW 0 ;...............................................................................;...............................................................................DoDelay1s:.gen FOR LoopCounter = #0 TO #40MOVLW 250MOVWF CountOuterCALL Delay100us.gen ENDFORRETLW 0 ;...............................................................................;...............................................................................; Delay100us:; This function will consume (CountOuter * (99 * 4 + 4)) + 3 == (CountOuter * 400) + 3 cycles ; At 40Mhz processor clock, this will generate a CountOuter * 100 uSecs software delay; Note: if CountOuter is zero, the function will consume (256 * 400) + 3 cycles ;...............................................................................DoDelay100us:LoopOuter:MOVLW 99MOVWF CountInnerLoopInner:NOPNOPDECFSZ CountInner,fGOTO LoopInnerDECFSZ CountOuter,fGOTO LoopOuterRETLW 0 ;...............................................................................;............................................................................... DoDelay2us:MOVLW 1MOVWF CountInnerD2_LoopInner:NOPNOPDECFSZ CountInner,fGOTO D2_LoopInnerRETLW 0 ;...............................................................................END。

AltiumDesigner软件使用教程

AltiumDesigner软件使用教程

目录目录 (1)第一部分应用电子技术实训教学大纲,要求与实训资源简介 (4)1.1应用电子技术实训教学大纲 (4)1.2实训内容与学时分配 (5)1.3实训安排与考核方式 (7)第二部分Altium Designer10电路设计实训入门 (8)2.1 印制电路板与Protel概述 (8)2.1.1印制电路板设计流程 (9)2.2 原理图设计 (10)2.2.1 原理图设计步骤: (10)2.2.2 原理图设计具体操作流程 (11)2.3 原理图库的建立 (19)2.3.1 原理图库概述 (19)2.3.2 编辑和建立元件库 (19)2.4 创建PCB元器件封装 (25)2.4.1元器件封装概述 (25)2.4.2 创建封装库大体流程 (26)2.4.3 绘制PCB封装库具体步骤和操作 (27)2.5 PCB设计 (37)2.5.1 重要的概念和规则 (37)2.5.2 PCB设计流程 (38)2.5.3详细设计步骤和操作 (39)2.6 实训项目 (47)2.6.1 任务分析 (47)2.6.2 任务实施 (49)第三部分PCB板基础知识、布局原则、布线技巧、设计规则 (87)3.1 PCB板基础知识 (87)3.2 PCB板布局原则...............................................................................................错误!未定义书签。

3.3 PCB板布线原则 (91)3.4 Alitum Designer的PCB板布线规则 (93)第四部分自制电路板实训入门 (98)4.1 自制电路板最常用方法及工具介绍 (98)4.2 描绘法自制电路板 (102)4.3感光板法制作电路板(图解说明全过程) ...................................................错误!未定义书签。

altium步骤

altium步骤

建立工程1. 选择File>>New>>Project>>PCB Project,“工程”后缀名是“.PrjPCB”2. File>>Save ProjectAs,选择想要存放的地方,同时改工程名,后缀不要变。

创建原理图1.选择File>>New>>Schematic,后缀名是“.SchDoc”2.File>>SaveAs,选择想要存放的地方,同时改工程名,后缀不要变。

创建PCB通过在面板“files”中最后一项中选择“PCB Board Wizard”,对出现的对话框中的选项进行设置之后,另存PCB文件,并将此文件移动到欲存目录下(拖动即可)。

PCB布线过程PCB布线中添加过孔和切换板层过孔的属性的设计规则位于PCB Rules and Constraints Editor对话框里的Routing Via Style。

添加过孔并切换板层在布线过程中按数字键盘的“*”或“+”键添加一个过孔并切换到下一个信号层。

按“-”键添加一个过孔并切换到上一个信号层。

添加过孔而不切换板层按“2”键添加一个过孔添加扇出过孔按数字键盘的“/”键为当前走线添加过孔PCB板的单层显示Shift + S处理布线冲突Shift+R重新设置布线边框大小首先选中“Keep-Out Layer”层,将布线区域移动到合适位置,之后执行“Design”→“Board Shape”→“Redefine Board Shape”命令检查PCB板有没违反设计规则(重新学习)泪滴“tools”→“Teardrops”,先选择对象再进行设置。

在低频电路中,可以放置过孔或焊盘作为安装孔。

布置多边形铺铜区域在设计电路板时,有时为了提高系统的抗干扰性,需要设置较大面积的接地线区域(大面积接地)。

Place→Polygon plane,在对话框中勿忘设置“网络选项”,连接到网络选项。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

I2C Arbitration 6A 软件设计第一部分 原理图1.1 FPGA_51_External_Memory.SchDocPXXPXX PXX PXX PXXPXXPXX PXXPXX PXX PXX PXX,PXX,PXX,PXX,PXX,PXX,PXX,PXXlibrary IEEE;use IEEE.std_logic_1164.all;entity EXT_MEM_CTRL isport (-- Selects the behaviour of the two external memory chipsMEM_SELECT : in std_logic ;-- External data/program Memory control signals - control from the core E_RAM_WR : in std_logic;E_RAM_RD : in std_logic;E_ROM_WR : in std_logic;E_ROM_RD : in std_logic;E_RAM_DATAI : in std_logic_vector(7 downto 0);E_RAM_DATAO : out std_logic_vector(7 downto 0);E_RAM_ADDR : in std_logic_vector(15 downto 0);-- External memory interface - going directly to the memory chipEXT_RAM0_DATA : inout std_logic_vector(7 downto 0);EXT_RAM0_WR : out std_logic;EXT_RAM0_OE : out std_logic;EXT_RAM1_DATA : inout std_logic_vector(7 downto 0);EXT_RAM1_WR : out std_logic;EXT_RAM1_OE : out std_logic;EXT_ADDRESS : out std_logic_vector(16 downto 0);EXT_CS : out std_logic);end EXT_MEM_CTRL;------------------------------------------------------------------------------------------------------------------------architecture rtl of EXT_MEM_CTRL isbegin-- if MEM_SELECT is 1 then-- RAM0_DATA is the data memory-- RAM1_DATA is the program memory-- RAM_DATA is connected to RAM0_DATA which is the data memory-- ROM_DATA is connected to RAM1_DATA which is the program memory-- the RAM0 control signals are tied to the processor RAM-- the RAM1 control signals are tied to the processor ROM---- otherwise---- RAM1_DATA is the data memory-- RAM0_DATA is the program memory-- RAM_DATA is connected to RAM1_DATA which is the data memory-- ROM_DATA is connected to RAM0_DATA which is the program memory-- the RAM0 control signals are tied to the processor ROM-- the RAM1 control signals are tied to the processor RAM--process(E_RAM_WR, E_ROM_WR, E_RAM_RD, E_ROM_RD, MEM_SELECT, E_RAM_DATAI, EXT_RAM0_DATA, EXT_RAM1_DATA) beginif MEM_SELECT = '1' thenif E_RAM_WR = '1' thenEXT_RAM0_DATA <= E_RAM_DATAI;elseEXT_RAM0_DATA <= (others=>'Z');end if;EXT_RAM1_DATA <= E_RAM_DATAI;elseEXT_RAM1_DATA <= (others=>'Z');end if;if E_RAM_RD = '1' thenE_RAM_DATAO <= EXT_RAM0_DATA;elsif E_ROM_RD = '1' thenE_RAM_DATAO <= EXT_RAM1_DATA;elseE_RAM_DATAO <= (others => '-');end if;EXT_RAM0_WR <= not E_RAM_WR;EXT_RAM0_OE <= not E_RAM_RD;EXT_RAM1_WR <= not E_ROM_WR;EXT_RAM1_OE <= not E_ROM_RD; elseif E_RAM_WR = '1' thenEXT_RAM1_DATA <= E_RAM_DATAI;elseEXT_RAM1_DATA <= (others=>'Z');end if;if E_ROM_WR = '1' thenEXT_RAM0_DATA <= E_RAM_DATAI;elseEXT_RAM0_DATA <= (others=>'Z');end if;E_RAM_DATAO <= EXT_RAM1_DATA;elsif E_ROM_RD = '1' thenE_RAM_DATAO <= EXT_RAM0_DATA;elseE_RAM_DATAO <= (others => '-');end if;EXT_RAM0_WR <= not E_ROM_WR;EXT_RAM0_OE <= not E_ROM_RD;EXT_RAM1_WR <= not E_RAM_WR;EXT_RAM1_OE <= not E_RAM_RD;end if;end process;-- Chip select of the external memory is active lowEXT_CS <= '0' ;-- Address from the processor is connected straight to the external address EXT_ADDRESS <= '0' & E_RAM_ADDR;end rtl;------------------------------------------------------------1.4Ext_Mem_Ctrl.ASM ;............................................................................... EAL.equ 0AFH;P0 .equ 80H;P1 .equ 90H;P2 .equ 0A0H;P3 .equ 0B0H;DPL .equ 82H;DPH .equ 83H;PSW .equ 0D0H;ACC .equ 0E0H ;...............................................................................;............................................................................... MainCountLow.equ 38HRightShift.equ 42HLeftShift.equ 43HCountInner.equ 40HCountOuter.equ 41HExtMemCnt.equ 44H ;................................................................................Section Text, Code; .org 0000HMainProc: ;...............................................................................LJMP INIT ;...............................................................................INIT:MOV DPL,#00HMOV DPH,#22HMOV PSW,#00HMOV P0, #00HMOV MainCountLow, #00HMOV RightShift, #01HMOV LeftShift, #80HCLR EAL;............................................................................... MainLoop : ;...............................................................................LCALL VeryLongDelayLCALL IncrementCounterLCALL ShiftForDiodeLCALL DisplayCounterSJMP MainLoop ;...............................................................................;............................................................................... IncrementCounter ;...............................................................................INC MainCountLowRET ;...............................................................................;............................................................................... ShiftForDiode:;...............................................................................MOV A, RightShiftRR AMOV RightShift, AMOV A, LeftShiftRL AMOV LeftShift, ARET ;...............................................................................;............................................................................... DisplayCounter: ;...............................................................................PUSH DPLPUSH DPHPUSH ACCMOV DPH, #01HMOV DPL, #0FFHMOV A, MainCountLowMOVX @DPTR, AMOV A, #00HMOVX A, @DPTRMOV ExtMemCnt, APOP ACCPOP DPHPOP DPLMOV P0, ExtMemCntRET ;...............................................................................;............................................................................... LongDelay: ;...............................................................................MOV CountOuter, #0AAHLoopOuter:MOV CountInner, #0AAHLoopInner:DEC CountInnerMOV A, CountInnerJNZ LoopInnerDEC CountOuterMOV A, CountOuterJNZ LoopOuterRET ;...............................................................................;............................................................................... VeryLongDelay: ;...............................................................................LCALL LongDelayLCALL LongDelayLCALL LongDelayLCALL LongDelayLCALL LongDelayRET ;................................................................................END。

相关文档
最新文档