Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
S
Software for White Rabbit PTP Core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
32
Issues
32
List
Board
Labels
Milestones
Merge Requests
6
Merge Requests
6
CI / CD
CI / CD
Pipelines
Schedules
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
Software for White Rabbit PTP Core
Commits
6c66cf95
Commit
6c66cf95
authored
Sep 12, 2011
by
Grzegorz Daniluk
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'tom_mods'
Conflicts: wrc_main.c
parents
985c699d
b4c85881
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
511 additions
and
226 deletions
+511
-226
Makefile
Makefile
+3
-3
endpoint.c
dev/endpoint.c
+1
-1
minic.c
dev/minic.c
+18
-17
softpll.c
dev/softpll.c
+14
-6
uart.c
dev/uart.c
+10
-0
board.h
include/board.h
+2
-2
trace.h
include/trace.h
+3
-1
monitor.c
monitor/monitor.c
+16
-8
crt0.S
target/lm32/crt0.S
+254
-138
Makefile
tools/Makefile
+4
-4
lm32-loader.c
tools/lm32-loader.c
+48
-2
wrc_main.c
wrc_main.c
+138
-44
No files found.
Makefile
View file @
6c66cf95
...
...
@@ -7,7 +7,7 @@ PTPD_CFLAGS = -ffreestanding -DPTPD_FREESTANDING -DWRPC_EXTRA_SLIM -DPTPD_MSBF
PTPD_CFLAGS
+=
-Wall
-ggdb
-I
$D
/wrsw_hal
\
-I
$D
/libptpnetif
-I
$D
/PTPWRd
\
-include
$D
/compat.h
-include
$D
/PTPWRd/dep/trace.h
-include
$D
/libposix/ptpd-wrappers.h
PTPD_CFLAGS
+=
-DPTPD_NO_DAEMON
-DNEW_SINGLE_WRFSM
-DPTPD_TRACE_MASK
=
0x2804
PTPD_CFLAGS
+=
-DPTPD_NO_DAEMON
-DNEW_SINGLE_WRFSM
-DPTPD_TRACE_MASK
=
TRACE_SERVO
OBJS_PTPD
=
$D
/PTPWRd/arith.o
OBJS_PTPD
+=
$D
/PTPWRd/bmc.o
...
...
@@ -56,7 +56,7 @@ all: $(OBJS)
$(SIZE)
-t
$(OBJS)
${
CC
}
-o
$(OUTPUT)
.elf
$(OBJS)
$(LDFLAGS)
${
OBJCOPY
}
-O
binary
$(OUTPUT)
.elf
$(OUTPUT)
.bin
#
${OBJDUMP} -d $(OUTPUT).elf > $(OUTPUT)_disasm.S
${
OBJDUMP
}
-d
$(OUTPUT)
.elf
>
$(OUTPUT)
_disasm.S
./tools/genraminit
$(OUTPUT)
.bin 0
>
$(OUTPUT)
.ram
clean
:
...
...
@@ -66,7 +66,7 @@ clean:
${
CC
}
$(CFLAGS)
$(PTPD_CFLAGS)
$(INCLUDE_DIR)
$(LIB_DIR)
-c
$^
-o
$@
load
:
all
./tools/
zpu
-loader
$(OUTPUT)
.bin
./tools/
lm32
-loader
$(OUTPUT)
.bin
tools
:
make
-C
tools
...
...
dev/endpoint.c
View file @
6c66cf95
...
...
@@ -116,7 +116,7 @@ int ep_get_deltas(uint32_t *delta_tx, uint32_t *delta_rx)
{
// mprintf("called ep_get_deltas()\n");
*
delta_tx
=
0
;
*
delta_rx
=
15000
-
7000
+
195000
+
32000
+
UIS_PER_SERIAL_BIT
*
MDIO_WR_SPEC_BSLIDE_R
(
pcs_read
(
MDIO_REG_WR_SPEC
))
+
2800
;
*
delta_rx
=
15000
-
7000
+
195000
+
32000
+
UIS_PER_SERIAL_BIT
*
MDIO_WR_SPEC_BSLIDE_R
(
pcs_read
(
MDIO_REG_WR_SPEC
))
+
2800
-
9000
;
}
void
ep_show_counters
()
...
...
dev/minic.c
View file @
6c66cf95
...
...
@@ -50,6 +50,8 @@ struct wr_minic {
int
syncing_counters
;
int
iface_up
;
int
tx_count
,
rx_count
;
uint32_t
cur_rx_desc
;
};
...
...
@@ -98,6 +100,9 @@ void minic_init()
minic
.
tx_base
=
dma_tx_buf
;
minic
.
tx_size
=
sizeof
(
dma_tx_buf
);
minic
.
tx_count
=
0
;
minic
.
rx_count
=
0
;
minic_new_rx_buffer
();
minic_writel
(
MINIC_REG_EIC_IER
,
MINIC_EIC_IER_RX
);
...
...
@@ -178,25 +183,14 @@ int minic_rx_frame(uint8_t *hdr, uint8_t *payload, uint32_t buf_size, struct hw_
hwts
->
nsec
=
counter_r
*
8
;
// TRACE_DEV("TS minic_rx_frame: %d.%d\n", hwts->utc, hwts->nsec);
}
n_recvd
=
(
buf_size
<
payload_size
?
buf_size
:
payload_size
);
/* FIXME: VLAN support */
TRACE_DEV
(
"minic_rx_frame [%d bytes] TS: %d.%d
\n
"
,
n_recvd
,
hwts
->
utc
,
hwts
->
nsec
);
minic
.
rx_count
++
;
memcpy
(
hdr
,
(
void
*
)
minic
.
rx_head
+
4
,
ETH_HEADER_SIZE
);
//TRACE_DEV("%s: packet: ", __FUNCTION__);
//for(i=0; i<ETH_HEADER_SIZE; i++) TRACE_DEV("%x ", *(hdr+i));
memcpy
(
payload
,
(
void
*
)
minic
.
rx_head
+
4
+
ETH_HEADER_SIZE
,
n_recvd
-
ETH_HEADER_SIZE
);
//for(i=0; i<n_recvd-ETH_HEADER_SIZE; i++) TRACE_DEV("%x ", *(payload+i));
/* for(i=0;i<n_recvd-14;i++)
TRACE_DEV("%x ", payload[i]);
TRACE_DEV("---\n");
*/
// TRACE_DEV("nwords_avant: %d\n", num_words);
minic
.
rx_head
+=
num_words
;
}
else
{
// RX_DESC_ERROR
...
...
@@ -230,7 +224,7 @@ int minic_tx_frame(uint8_t *hdr, uint8_t *payload, uint32_t size, struct hw_time
minic_new_tx_buffer
();
TRACE_DEV
(
"minic_tx_frame: head %x size %d
\n
"
,
minic
.
tx_head
,
size
);
memset
(
minic
.
tx_head
,
0x0
,
size
+
16
);
memset
((
void
*
)
minic
.
tx_head
+
4
,
0
,
size
<
60
?
60
:
size
);
memcpy
((
void
*
)
minic
.
tx_head
+
4
,
hdr
,
ETH_HEADER_SIZE
);
...
...
@@ -293,7 +287,8 @@ int minic_tx_frame(uint8_t *hdr, uint8_t *payload, uint32_t size, struct hw_time
hwts
->
ahead
=
0
;
hwts
->
nsec
=
counter_r
*
8
;
// TRACE_DEV("TS minic_tx_frame: %d.%d\n", hwts->utc, hwts->nsec);
TRACE_DEV
(
"minic_tx_frame [%d bytes] TS: %d.%d
\n
"
,
size
,
hwts
->
utc
,
hwts
->
nsec
);
minic
.
tx_count
++
;
}
...
...
@@ -301,3 +296,9 @@ int minic_tx_frame(uint8_t *hdr, uint8_t *payload, uint32_t size, struct hw_time
return
size
;
}
void
minic_get_stats
(
int
*
tx_frames
,
int
*
rx_frames
)
{
*
tx_frames
=
minic
.
tx_count
;
*
rx_frames
=
minic
.
rx_count
;
}
\ No newline at end of file
dev/softpll.c
View file @
6c66cf95
...
...
@@ -3,7 +3,9 @@
#include <hw/softpll_regs.h>
#define TAG_BITS 17
#include "gpio.h"
#define TAG_BITS 20
#define HPLL_N 14
...
...
@@ -119,6 +121,8 @@ int eee, dve;
static
volatile
struct
softpll_state
pstate
;
volatile
int
irq_cnt
=
0
;
volatile
int
sp_limit
=
0xffff
;
void
_irq_entry
()
{
int
dv
;
...
...
@@ -126,7 +130,11 @@ void _irq_entry()
int
tag_fb_ready
=
0
;
int
tag_ref
;
int
tag_fb
;
// int sp = _get_sp();
irq_cnt
++
;
gpio_out
(
GPIO_PIN_LED_STATUS
,
1
);
if
(
SPLL
->
CSR
&
READY_REF
)
{
tag_ref
=
SPLL
->
TAG_REF
;
...
...
@@ -336,6 +344,8 @@ void _irq_entry()
pstate
.
d_locked
=
1
;
}
gpio_out
(
GPIO_PIN_LED_STATUS
,
0
);
clear_irq
();
}
...
...
@@ -361,7 +371,6 @@ void softpll_enable()
SPLL
->
CSR
=
SPLL_CSR_TAG_EN_W
(
CHAN_PERIOD
);
// | SPLL_CSR_TAG_EN_W(CHAN_REF);
;
SPLL
->
EIC_IER
=
1
;
enable_irq
();
...
...
@@ -374,10 +383,9 @@ void softpll_enable()
int
softpll_check_lock
()
{
/* TRACE_DEV("LCK h:f%d l%d d: f%d l%d err %d %d dac %d\n",
pstate.h_freq_mode ,pstate.h_locked,
pstate.d_freq_mode, pstate.d_locked,
pstate.h_tag, pstate.h_tag & 0x3fff, pstate.h_dac_val);*/
TRACE_DEV
(
"[softpll] Helper: lock %d freqmode %d, Main: lock %d freqmode %d
\n
"
,
pstate
.
h_locked
,
pstate
.
h_freq_mode
,
pstate
.
d_locked
,
pstate
.
d_freq_mode
);
int
lck
=
pstate
.
h_locked
&&
pstate
.
d_locked
;
...
...
dev/uart.c
View file @
6c66cf95
...
...
@@ -30,3 +30,13 @@ void uart_write_string(char *s)
while
(
*
s
)
uart_write_byte
(
*
(
s
++
));
}
int
uart_poll
()
{
return
uart
->
SR
&
UART_SR_RX_RDY
;
}
int
uart_read_byte
()
{
return
uart
->
RDR
&
0xff
;
}
\ No newline at end of file
include/board.h
View file @
6c66cf95
...
...
@@ -13,8 +13,8 @@
#define UART_BAUDRATE 115200ULL
/* not a real UART */
#define GPIO_PIN_LED
1
0
#define GPIO_PIN_LED
2
1
#define GPIO_PIN_LED
_LINK
0
#define GPIO_PIN_LED
_STATUS
1
#define GPIO_PIN_SCL_OUT 2
#define GPIO_PIN_SDA_OUT 3
#define GPIO_PIN_SDA_IN 4
...
...
include/trace.h
View file @
6c66cf95
#ifndef __FREESTANDING_TRACE_H__
#define __FREESTANDING_TRACE_H__
extern
int
wrc_extra_debug
;
#define TRACE_WRAP(...)
#define TRACE_DEV(...)
mprintf(
__VA_ARGS__)
#define TRACE_DEV(...)
if(wrc_extra_debug) wrc_debug_printf(0,
__VA_ARGS__)
#endif
monitor/monitor.c
View file @
6c66cf95
...
...
@@ -3,7 +3,7 @@
#include "hal_exports.h"
extern
ptpdexp_sync_state_t
cur_servo_state
;
extern
int
wrc_man_phase
;
#define C_DIM 0x80
#define C_WHITE 7
...
...
@@ -20,11 +20,13 @@ int64_t abs64(int64_t t)
int
wr_mon_debug
(
void
)
int
wrc_mon_gui
(
void
)
{
static
char
*
slave_states
[]
=
{
"Uninitialized"
,
"SYNC_UTC"
,
"SYNC_NSEC"
,
"SYNC_PHASE"
,
"TRACK_PHASE"
};
static
uint32_t
last
=
0
;
hexp_port_state_t
ps
;
int
tx
,
rx
;
if
(
timer_get_tics
()
-
last
<
1000
)
return
0
;
...
...
@@ -33,18 +35,20 @@ int wr_mon_debug(void)
m_term_clear
();
m_pcprintf
(
1
,
1
,
C_BLUE
,
"WR PTP Core Sync Monitor v 0.1 **** pre-alpha version ****"
);
m_pcprintf
(
1
,
1
,
C_BLUE
,
"WR PTP Core Sync Monitor v 0.2"
);
m_pcprintf
(
2
,
1
,
C_GREY
,
"g = exit, t = enable/disable phase tracking, +/- = increase/decrease phase by 100ps"
);
/*show_ports*/
halexp_get_port_state
(
&
ps
,
NULL
);
m_pcprintf
(
3
,
1
,
C_BLUE
,
"Link status:"
);
m_pcprintf
(
4
,
1
,
C_BLUE
,
"Link status:"
);
m_pcprintf
(
5
,
1
,
C_WHITE
,
"%s: "
,
"wru1"
);
m_pcprintf
(
6
,
1
,
C_WHITE
,
"%s: "
,
"wru1"
);
if
(
ps
.
up
)
m_cprintf
(
C_GREEN
,
"Link up "
);
else
m_cprintf
(
C_RED
,
"Link down "
);
if
(
ps
.
up
)
{
m_cprintf
(
C_GREY
,
"mode: "
);
minic_get_stats
(
&
tx
,
&
rx
);
m_cprintf
(
C_GREY
,
"(RX: %d, TX: %d), mode: "
,
rx
,
tx
);
switch
(
ps
.
mode
)
{
...
...
@@ -79,8 +83,12 @@ int wr_mon_debug(void)
m_cprintf
(
C_GREY
,
"Clock offset: "
);
m_cprintf
(
C_WHITE
,
"%d ps
\n
"
,
(
int32_t
)(
cur_servo_state
.
cur_offset
));
m_cprintf
(
C_GREY
,
"Phase setpoint: "
);
m_cprintf
(
C_WHITE
,
"%d ps
\n
"
,
(
int32_t
)(
cur_servo_state
.
cur_setpoint
));
m_cprintf
(
C_GREY
,
"Skew: "
);
m_cprintf
(
C_WHITE
,
"%d ps
\n
"
,
(
int32_t
)(
cur_servo_state
.
cur_skew
));
m_cprintf
(
C_GREY
,
"Manual phase adjustment: "
);
m_cprintf
(
C_WHITE
,
"%d ps
\n
"
,
(
int32_t
)(
wrc_man_phase
));
}
m_cprintf
(
C_GREY
,
"--"
);
return
0
;
}
target/lm32/crt0.S
100644 → 100755
View file @
6c66cf95
/****************************************************************************
**
** Name: crt0ram.S
**
** Description:
** Implements boot-code that calls LatticeDDInit (that calls main())
** Implements exception handlers (actually, redirectors)
**
** $Revision: $
**
** Disclaimer:
**
** This source code is intended as a design reference which
** illustrates how these types of functions can be implemented. It
** is the user's responsibility to verify their design for
** consistency and functionality through the use of formal
** verification methods. Lattice Semiconductor provides no warranty
** regarding the use or functionality of this code.
**
** --------------------------------------------------------------------
**
** Lattice Semiconductor Corporation
** 5555 NE Moore Court
** Hillsboro, OR 97214
** U.S.A
**
** TEL: 1-800-Lattice (USA and Canada)
** (503)268-8001 (other locations)
**
** web: http://www.latticesemi.com
** email: techsupport@latticesemi.com
**
** --------------------------------------------------------------------------
**
** Change History (Latest changes on top)
**
** Ver Date Description
** --------------------------------------------------------------------------
** 3.8 Apr-15-2011 Added __MICO_USER_<handler>_HANDLER__ preprocessor to
** allow customers to implement their own handlers for:
** DATA_ABORT, INST_ABORT
**
** 3.1 Jun-18-2008 Added __MICO_NO_INTERRUPTS__ preprocessor
** option to exclude invoking MicoISRHandler
** to reduce code-size in apps that don't use
** interrupts
**
** 3.0 Mar-25-2008 Added Header
**
**---------------------------------------------------------------------------
*****************************************************************************/
/*
* Lattice Mico32 C startup code.
* Contributed by Jon Beniston <jon@beniston.com>
* LatticeMico32 C startup code.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
...
...
@@ -24,120 +75,185 @@
* SUCH DAMAGE.
*/
.section .boot, "ax", @progbits
/* From include/sys/signal.h */
#define SIGINT 2 /* interrupt */
#define SIGTRAP 5 /* trace trap */
#define SIGFPE 8 /* arithmetic exception */
#define SIGSEGV 11 /* segmentation violation */
/* Program starts here */
//#define MICO32_FULL_CONTEXT_SAVE_RESTORE
/* Exception handlers - Must be 32 bytes long. */
.section .boot, "ax", @progbits
.global _start
_start:
bi _crt0_enter
.org 0xc0
.global _reset_handler
.type _reset_handler, @function
_reset_handler:
xor r0, r0, r0
wcsr IE, r0
wcsr IM, r0
mvhi r1, hi(_reset_handler)
ori r1, r1, lo(_reset_handler)
wcsr EBA, r1
calli _crt0
nop
.size _reset_handler, .-_reset_handler
.extern _irq_entry
.org 0xc0
.global _interrupt_handler
.type _interrupt_handler, @function
_interrupt_handler:
sw (sp+0),ra
sw (sp+0), ra
calli _save_all
mvi r1,2
mvi r1, SIGINT
#ifndef __MICO_NO_INTERRUPTS__
calli _irq_entry
#else
wcsr IE, r0
#endif
bi _restore_all_and_return
nop
nop
nop
.org 0x100
_crt0_enter:
.org 0x100
.global _crt0
.type _crt0, @function
_crt0:
/* Clear r0 */
xor r0, r0, r0
/* Setup stack and global pointer */
mvhi sp, hi(_fstack)
ori sp, sp, lo(_fstack)
mvhi gp, hi(_gp)
ori gp, gp, lo(_gp)
/* Clear BSS */
mvhi r1, hi(_fbss)
ori r1, r1, lo(_fbss)
mvi r2, 0
mvhi r3, hi(_ebss)
ori r3, r3, lo(_ebss)
sub r3, r3, r1
calli memset
/* Call main program */
mvi r1, 0
mvi r2, 0
mvi r3, 0
calli main
loopf:
bi loopf
.global _save_all
.type _save_all, @function
_save_all:
addi sp,sp,-128
sw (sp+4),r1
sw (sp+8),r2
sw (sp+12),r3
sw (sp+16),r4
sw (sp+20),r5
sw (sp+24),r6
sw (sp+28),r7
sw (sp+32),r8
sw (sp+36),r9
sw (sp+40),r10
sw (sp+44),r11
sw (sp+48),r12
sw (sp+52),r13
sw (sp+56),r14
sw (sp+60),r15
sw (sp+64),r16
sw (sp+68),r17
sw (sp+72),r18
sw (sp+76),r19
sw (sp+80),r20
sw (sp+84),r21
sw (sp+88),r22
sw (sp+92),r23
sw (sp+96),r24
sw (sp+100),r25
sw (sp+104),gp
sw (sp+108),fp
sw (sp+120),ea
sw (sp+124),ba
lw r1,(sp+128)
sw (sp+116),r1
mv r1,sp
addi r1,r1,128
sw (sp+112),r1
#ifdef MICO32_FULL_CONTEXT_SAVE_RESTORE
addi sp, sp, -128
#else
addi sp, sp, -60
#endif
sw (sp+4), r1
sw (sp+8), r2
sw (sp+12), r3
sw (sp+16), r4
sw (sp+20), r5
sw (sp+24), r6
sw (sp+28), r7
sw (sp+32), r8
sw (sp+36), r9
sw (sp+40), r10
#ifdef MICO32_FULL_CONTEXT_SAVE_RESTORE
sw (sp+44), r11
sw (sp+48), r12
sw (sp+52), r13
sw (sp+56), r14
sw (sp+60), r15
sw (sp+64), r16
sw (sp+68), r17
sw (sp+72), r18
sw (sp+76), r19
sw (sp+80), r20
sw (sp+84), r21
sw (sp+88), r22
sw (sp+92), r23
sw (sp+96), r24
sw (sp+100), r25
sw (sp+104), r26
sw (sp+108), r27
sw (sp+120), ea
sw (sp+124), ba
/* ra and sp need special handling, as they have been modified */
lw r1, (sp+128)
sw (sp+116), r1
mv r1, sp
addi r1, r1, 128
sw (sp+112), r1
#else
sw (sp+52), ea
sw (sp+56), ba
/* ra and sp need special handling, as they have been modified */
lw r1, (sp+60)
sw (sp+48), r1
mv r1, sp
addi r1, r1, 60
sw (sp+44), r1
#endif
// xor r1, r1, r1
// wcsr ie, r1
ret
.size _save_all, .-_save_all
.global _restore_all_and_return
.type _restore_all_and_return, @function
/* Restore all registers and return from exception */
_restore_all_and_return:
lw r1,(sp+4)
lw r2,(sp+8)
lw r3,(sp+12)
lw r4,(sp+16)
lw r5,(sp+20)
lw r6,(sp+24)
lw r7,(sp+28)
lw r8,(sp+32)
lw r9,(sp+36)
lw r10,(sp+40)
lw r11,(sp+44)
lw r12,(sp+48)
lw r13,(sp+52)
lw r14,(sp+56)
lw r15,(sp+60)
lw r16,(sp+64)
lw r17,(sp+68)
lw r18,(sp+72)
lw r19,(sp+76)
lw r20,(sp+80)
lw r21,(sp+84)
lw r22,(sp+88)
lw r23,(sp+92)
lw r24,(sp+96)
lw r25,(sp+100)
lw gp,(sp+104)
lw fp,(sp+108)
lw ra,(sp+116)
lw ea,(sp+120)
lw ba,(sp+124)
lw sp,(sp+112)
// addi r1, r0, 2
// wcsr ie, r1
lw r1, (sp+4)
lw r2, (sp+8)
lw r3, (sp+12)
lw r4, (sp+16)
lw r5, (sp+20)
lw r6, (sp+24)
lw r7, (sp+28)
lw r8, (sp+32)
lw r9, (sp+36)
lw r10, (sp+40)
#ifdef MICO32_FULL_CONTEXT_SAVE_RESTORE
lw r11, (sp+44)
lw r12, (sp+48)
lw r13, (sp+52)
lw r14, (sp+56)
lw r15, (sp+60)
lw r16, (sp+64)
lw r17, (sp+68)
lw r18, (sp+72)
lw r19, (sp+76)
lw r20, (sp+80)
lw r21, (sp+84)
lw r22, (sp+88)
lw r23, (sp+92)
lw r24, (sp+96)
lw r25, (sp+100)
lw r26, (sp+104)
lw r27, (sp+108)
lw ra, (sp+116)
lw ea, (sp+120)
lw ba, (sp+124)
/* Stack pointer must be restored last, in case it has been updated */
lw sp, (sp+112)
#else
lw ra, (sp+48)
lw ea, (sp+52)
lw ba, (sp+56)
/* Stack pointer must be restored last, in case it has been updated */
lw sp, (sp+44)
#endif
nop
eret
.size _restore_all_and_return, .-_restore_all_and_return
tools/Makefile
View file @
6c66cf95
...
...
@@ -10,12 +10,12 @@ STRIP = $(CROSS_COMPILE)strip
OBJCOPY
=
$(CROSS_COMPILE)
objcopy
OBJDUMP
=
$(CROSS_COMPILE)
objdump
all
:
zpu
-loader genraminit vuart_console
all
:
lm32
-loader genraminit vuart_console
OBJS_LOADER
=
zpu
-loader.o rr_io.o
OBJS_LOADER
=
lm32
-loader.o rr_io.o
zpu
-loader
:
$(OBJS_LOADER)
${
CC
}
-o
zpu
-loader
$(OBJS_LOADER)
lm32
-loader
:
$(OBJS_LOADER)
${
CC
}
-o
lm32
-loader
$(OBJS_LOADER)
genraminit
:
genraminit.o
${
CC
}
-o
genraminit genraminit.o
...
...
tools/
zpu
-loader.c
→
tools/
lm32
-loader.c
View file @
6c66cf95
...
...
@@ -35,22 +35,30 @@ int rst_zpu(int spec, int rst);
int
copy
(
int
spec
,
int
srcbin
,
unsigned
int
baseaddr
);
int
verify
(
int
spec
,
int
srcbin
,
unsigned
int
baseaddr
);
int
conv_endian
(
int
x
);
int
dump_to_file
(
int
spec
,
char
*
filename
,
unsigned
int
baseaddr
);
int
main
(
int
argc
,
char
**
argv
)
{
unsigned
int
addr
=
0x80000
;
int
spec
,
srcbin
;
unsigned
int
bytes
;
char
*
dumpfile
=
NULL
;
if
(
argc
<
2
)
{
fprintf
(
stderr
,
"No parameters specified !
\n
"
);
fprintf
(
stderr
,
"Usage:
\n\t
./loadsw <binary file> [base address]
\n
"
);
fprintf
(
stderr
,
"Usage:
\n\t
./%s [-r] <binary file> [base address]
\n
"
,
argv
[
0
]);
fprintf
(
stderr
,
"-r options dumps the memory contents to a given file.
\n\n
"
);
return
-
1
;
}
if
(
argc
==
3
)
if
(
!
strcmp
(
argv
[
1
],
"-r"
))
dumpfile
=
argv
[
2
];
else
if
(
argc
==
3
)
addr
=
atoi
(
argv
[
2
]);
spec
=
open
(
DEVNAME
,
O_RDWR
);
if
(
spec
<
0
)
{
...
...
@@ -58,6 +66,12 @@ int main(int argc, char **argv)
return
-
1
;
}
if
(
dumpfile
)
{
dump_to_file
(
spec
,
dumpfile
,
addr
);
return
0
;
}
srcbin
=
open
(
argv
[
1
],
O_RDONLY
);
if
(
srcbin
<
0
)
{
...
...
@@ -124,6 +138,38 @@ int copy(int spec, int srcbin, unsigned int baseaddr)
return
bytes
;
}
int
dump_to_file
(
int
spec
,
char
*
filename
,
unsigned
int
baseaddr
)
{
unsigned
int
bytes
,
word
;
struct
rr_iocmd
iocmd
;
int
ret
;
FILE
*
f
=
fopen
(
filename
,
"wb"
);
if
(
!
f
)
return
-
1
;
bytes
=
0
;
while
(
bytes
<
0x10000
)
{
iocmd
.
address
=
baseaddr
+
bytes
;
// bytes += ret; //address shift for next write
iocmd
.
address
|=
__RR_SET_BAR
(
0
);
//bar0
iocmd
.
datasize
=
4
;
iocmd
.
data32
=
0
;
ret
=
ioctl
(
spec
,
RR_READ
,
&
iocmd
);
word
=
conv_endian
(
iocmd
.
data32
);
fwrite
(
&
word
,
4
,
1
,
f
);
bytes
+=
4
;
}
fclose
(
f
);
}
int
verify
(
int
spec
,
int
srcbin
,
unsigned
int
baseaddr
)
{
unsigned
int
wbin
;
...
...
wrc_main.c
View file @
6c66cf95
#include <stdio.h>
#include <inttypes.h>
#include <stdarg.h>
#include "gpio.h"
#include "uart.h"
#include "endpoint.h"
...
...
@@ -125,34 +127,27 @@ int button_pressed()
int
enable_tracking
=
1
;
int
main
(
void
)
void
wrc_initialize
(
)
{
int
rx
,
tx
;
int
link_went_up
,
link_went_down
;
int
prev_link_state
=
0
,
link_state
;
int16_t
ret
;
int
ret
;
uart_init
();
uart_write_string
(
__FILE__
" is up (compiled on "
__DATE__
" "
__TIME__
")
\n
"
);
mprintf
(
"wr_core: starting up (press G to launch the GUI and D for extra debug messages)....
\n
"
);
ep_init
(
mac_addr
);
ep_enable
(
1
,
1
);
minic_init
();
pps_gen_init
();
netStartup
();
// mi2c_init();
// mi2c_scan();
gpio_dir
(
GPIO_PIN_BTN1
,
0
);
// softpll_enable(
);
// for(;;) softpll_check_lock(
);
gpio_dir
(
GPIO_PIN_LED_LINK
,
1
);
gpio_out
(
GPIO_PIN_LED_LINK
,
0
);
gpio_dir
(
GPIO_PIN_LED_STATUS
,
1
);
wr_servo_man_adjust_phase
(
-
11600
+
1700
);
...
...
@@ -160,36 +155,135 @@ int main(void)
ptpPortDS
=
ptpdStartup
(
0
,
NULL
,
&
ret
,
&
rtOpts
,
&
ptpClockDS
);
initDataClock
(
&
rtOpts
,
&
ptpClockDS
);
}
for
(;;)
{
link_state
=
ep_link_up
();
#define LINK_UP 1
#define LINK_DOWN 2
int
wrc_check_link
()
{
static
int
prev_link_state
=
-
1
;
int
link_state
=
ep_link_up
();
int
rv
=
0
;
link_went_up
=
!
prev_link_state
&&
link_state
;
if
(
!
prev_link_state
&&
link_state
)
{
TRACE_DEV
(
"Link up.
\n
"
);
gpio_out
(
GPIO_PIN_LED_LINK
,
1
);
rv
=
LINK_UP
;
}
else
if
(
prev_link_state
&&
!
link_state
)
{
TRACE_DEV
(
"Link down.
\n
"
);
gpio_out
(
GPIO_PIN_LED_LINK
,
0
);
rv
=
LINK_DOWN
;
}
prev_link_state
=
link_state
;
if
(
link_went_up
)
return
rv
;
}
int
wrc_extra_debug
=
0
;
int
wrc_gui_mode
=
0
;
void
wrc_debug_printf
(
int
subsys
,
const
char
*
fmt
,
...)
{
va_list
ap
;
if
(
wrc_gui_mode
)
return
;
va_start
(
ap
,
fmt
);
if
(
wrc_extra_debug
||
(
!
wrc_extra_debug
&&
(
subsys
&
TRACE_SERVO
)))
vprintf
(
fmt
,
ap
);
va_end
(
ap
);
}
static
int
wrc_enable_tracking
=
1
;
int
wrc_man_phase
=
0
;
void
wrc_handle_input
()
{
if
(
uart_poll
())
{
int
x
=
uart_read_byte
();
switch
(
x
)
{
case
'g'
:
wrc_gui_mode
=
1
-
wrc_gui_mode
;
if
(
!
wrc_gui_mode
)
{
uint32_t
dtxm
,
drxm
;
TRACE_DEV
(
"LINK UP
\n
"
);
// toState(PTP_INITIALIZING, &rtOpts, ptpPortDS);
m_term_clear
();
wrc_debug_printf
(
0
,
"Exiting GUI mode
\n
"
);
}
break
;
case
'd'
:
wrc_extra_debug
=
1
-
wrc_extra_debug
;
wrc_debug_printf
(
0
,
"Verbose debug %s.
\n
"
,
wrc_extra_debug
?
"enabled"
:
"disabled"
);
break
;
case
't'
:
wrc_enable_tracking
=
1
-
wrc_enable_tracking
;
wr_servo_enable_tracking
(
wrc_enable_tracking
);
wrc_debug_printf
(
0
,
"Phase tracking %s.
\n
"
,
wrc_enable_tracking
?
"enabled"
:
"disabled"
);
break
;
case
'+'
:
case
'-'
:
wrc_man_phase
+=
(
x
==
'+'
?
100
:
-
100
);
wrc_debug_printf
(
0
,
"Manual phase adjust: %d
\n
"
,
wrc_man_phase
);
wr_servo_man_adjust_phase
(
wrc_man_phase
);
break
;
}
}
}
int
dupa
(
int
a
)
{
return
a
;
}
extern
volatile
int
irq_cnt
;
//wr_mon_debug();
if
(
button_pressed
())
int
main
(
void
)
{
int
rx
,
tx
;
int
link_went_up
,
link_went_down
;
int
prev_link_state
=
0
,
link_state
;
int16_t
ret
;
wrc_initialize
();
softpll_enable
();
for
(;;)
{
wrc_check_link
();
wrc_handle_input
();
if
(
wrc_gui_mode
)
wrc_mon_gui
();
// printf("irq_cnt %d sp %x\n", dupa(irq_cnt), _get_sp());
/* if(button_pressed())
{
enable_tracking = 1-enable_tracking;
wr_servo_enable_tracking(enable_tracking);
}
//mprintf("before state=%d, wrState=%d\n", ptpPortDS->portState, ptpPortDS->wrPortState);
*/
protocol_nonblock
(
&
rtOpts
,
ptpPortDS
);
//mprintf("after state=%d, wrState=%d\n", ptpPortDS->portState, ptpPortDS->wrPortState);
update_rx_queues
();
// softpll_check_lock();
timer_delay
(
10
);
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment