嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ J5 X+ @! H0 ^3 b! D
Void UPP_TASK(Void)
$ T8 M( ?$ p7 U H5 a+ J
{
8 @! J5 q) e7 y) j
" h% }) ~( P0 W& U
int i,j,k,target_int_count=2;
( A4 R. Y6 f/ `) S* U
char ch[2];
7 M& B# g7 ~5 n5 N
. e9 i. K6 Q' f8 z
) [% G0 ~, B" ^1 U0 X! E
$ \7 U! g( V1 a; [) n
upp_interrupt_count = 0;
% C, U" I q& K/ ?7 j
upp_error_count = 0;
2 j3 Y7 b- u! O
/ V6 v$ L3 T& e* o
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" ]7 \3 `1 T) G% r t8 w
// Initialize data buffers
# B* P2 }; h" T
for (i = 0; i < upp_frame_size; i++)
& K) B1 Y9 A, P4 m
{
9 F6 ~# v- {0 ~2 T. p
upp_buffer_b
=i;
+ C3 g! b5 K" P! {, e
upp_buffer_a
= 0xDEAD;
. t5 s! F P8 ~8 S
}
/ P; r4 X6 ]9 Y% N
+ F6 {1 z" ~) P4 H( l
//for(i=0;i<1024;i++)
) V, J' @4 V" {# s
// temp
=0;
* E# r$ }: {# M" k7 p/ w
/ y r) b) x, [' {. _! T
//UPPReset();
( n, W' g+ y% Z! {7 q5 |
/*启动UPP DMA传输*/
; ~5 X8 v- |* D" C
UARTPuts("upp_prog_dma_i\n",-2);
( b% I8 P W" N3 Z r" j& u
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 n& k. ]' \) H0 ^
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ O+ X+ ?1 q M( q4 c
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
* k) Y& ~9 ?: Z) x; s
2 l+ k! q5 ~2 ?6 e+ E" |! m
UARTPuts("upp_prog_dma_i\n",-2);
# }3 K2 d& S& D* L
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 g- ~9 X2 ^; |8 p0 v! ~4 a7 d9 n
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; x( E. J4 E' j& M# y$ ?9 B2 q0 s
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 g ~0 L3 y5 f* i; b7 j4 a
. k6 l0 m2 Q0 B" w) a% u8 C
/*等待UPP传输完毕*/
9 x" D( G# G+ W% d% G$ P' N# o) g5 Z
//i=0;
2 b: ~$ u1 \' G' Q
//j=0;
) G$ P* R# r4 A: Z' c2 b+ Z% J1 {
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ e0 h+ H8 |) u3 R, W
{
" J* T6 P4 U) E5 [6 G
/* 测试UPP传输的同时操作普通DDR数据
R0 j/ w2 N3 \ u( F
temp
=i;
4 t& U2 b( V$ R8 d9 E
i++;
) m- _8 D0 l) Y* q7 a% g& d/ @
if(i==1024)
7 b8 G( X4 F! w2 E! J6 i. y- g
{
; Z2 G8 }+ q: h' v
i=0;
7 @) a6 u" T' I8 u1 z2 ~2 N
j++;
- e/ I% R! `% R$ R
}
4 f1 y- j9 E, w
*/
r: X" r) w8 C7 M
# S7 e* l/ B0 M9 v6 X/ ^7 u) @
asm(" nop");
3 E7 |% J( B8 _ K" A
) C/ q0 P8 Y7 z" q; w
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
4 N) L4 q% p$ F- j( b
}
+ `( y( H) c- |
: _- o2 K$ B- h1 s( b' g' L4 U
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' t- ]% n0 Y+ _ U+ }& W
//UARTprintf( "i=%d\n",i);
2 x; i, h9 `6 d0 p
//UARTprintf( "j=%d\n",j);
" f( w+ F; y' Q9 z
UARTPuts("Data mismatch in buffers.\n",-2);
0 X3 T9 q/ X, b
if (upp_interrupt_count == 2 && upp_error_count == 0)
' {7 P0 i- U' [9 ^
{
$ v0 p# U; W3 \3 C8 x- M" J
for (i = 0; i<upp_frame_size; i++)
; i g+ G; c( C; j7 U
{
% m( K6 V1 R8 { g/ [; p! u
if (upp_buffer_a
!= upp_buffer_b
)
) N2 ^) a3 c# v$ ]& J$ V
{
1 H+ a2 |/ {" j; c
upp_error_count++;
! O/ L6 n& ]5 ?! Y/ T
}
7 `$ D- l G, Y6 u2 T
}
' S7 b9 W& D2 \# l
}
3 c8 R& M' |. ~( W4 e
$ @2 P( L7 I. T% L9 v5 K' H
/* 报告通信结果*/
( w [ w) O2 J' a, [' C
if(upp_error_count != 0)
7 `, f7 z5 j3 U; J0 h
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 w: y# Q4 G0 f/ H
else
8 @& X. o4 C; z3 m# Q
UARTPuts("uPP transfers complete!\n",-2);
, q; a/ ^3 X$ T" N
, g: P, O: A9 f, Y
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; X& i/ q: F2 \0 \
UARTGets(ch,2);
: Q; }6 m8 q3 o& S& e6 z2 |
UARTPuts("\n", -2);
5 Z) v% T) N; F# G$ K
4 T% ?& I, ~3 E+ w( B
if(ch[0] == 'y')
. m I ^" L" ]3 I9 n- M
{
( M9 d' o |5 \) W0 R3 ^% N! p
/*打印全部读到的数据*/
6 ]& [) ], }" C+ X8 f0 n
for(i=0; i<upp_frame_size; )
$ s' e' |, x C" ]
{
8 S f3 Q# F# r- t
for(j=0; j<5; j++)
) O; h8 c: x# O( H" G
{
% q N) ]7 B; Q/ ?
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# ~" w- ?3 _: q
i++;
' l0 g5 v) H$ W9 |/ O" m1 o
//if(i >= 4096)
- T' A* p& o3 |* c" ?
// break;
" L& Z5 K: p. b, z5 N/ E* j
- H7 S) R, E" i- ?, p: W
}
) z7 P2 G" p8 i, S: X: p. o
UARTPuts("\n",-2);
/ E# `- C3 i* C
}
$ v+ ]6 O# f6 C+ R# N2 M q
}
1 z; ~& ^% _' ^0 {
, g, h* {6 X% N6 }
}
, x5 |$ M6 f3 ?& F Y; q
. V: y4 T2 W: X; G9 w4 ~
& a& A- n3 W' ?' N7 }2 p+ D) x
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) B' Y! p7 |8 @# _- ~
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& \5 R9 I B( c7 x6 b$ o. {* m0 }9 u
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4