嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
# C5 F% Z; a9 h" {% U# J
Void UPP_TASK(Void)
. ^/ B/ C/ {& `0 D
{
$ B, U2 y" U$ `6 |! Y1 G6 v
/ l9 S5 f$ K7 q1 D$ g# U
int i,j,k,target_int_count=2;
" V! i' B/ C [
char ch[2];
8 r/ [3 H& U0 K6 x+ t' l- T
9 m M0 I# h$ B; M
A; f( e& O* |2 N* Z3 E
) A" G: |2 A/ |, G5 b: W3 Z
upp_interrupt_count = 0;
% F. M9 @; } y: D6 z
upp_error_count = 0;
- X& g/ G, e) A7 p% ~) N2 u$ X* X
5 D! _# [2 U% @& s' m# S: d% ~
UARTPuts("\tResetting uPP buffers...\r\n",-2);
0 l4 v' Y' f. [+ I+ K6 A6 r; N
// Initialize data buffers
6 g, x6 a9 T8 z: l9 v5 j5 T& [
for (i = 0; i < upp_frame_size; i++)
3 Q% Q. e; {( ?2 ~% f
{
, n1 y2 |, ]2 b$ r2 n& ]8 H: L5 H
upp_buffer_b
=i;
1 N/ Z8 ? B P G! m0 r
upp_buffer_a
= 0xDEAD;
2 a, k3 W9 v; [3 b/ h* e: v
}
. ~1 B6 l) ^# z5 J0 S
' B8 ?* U2 |2 K$ U7 N2 l
//for(i=0;i<1024;i++)
0 A5 o, l8 N) G- H
// temp
=0;
+ t3 a$ I' n" Q
+ a* p0 s- P$ D; Y
//UPPReset();
. x; i& ]' `* K* Q
/*启动UPP DMA传输*/
w" y! X1 Q( E) v
UARTPuts("upp_prog_dma_i\n",-2);
7 K% V# ^ Y7 Z# h' {0 D
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ L6 p3 G' X) w0 y! H+ d
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 O! `$ x# t3 E# p
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
# Q* m$ E9 @+ ?( f- v
4 N) y4 N# A9 p V& a F; H$ F
UARTPuts("upp_prog_dma_i\n",-2);
1 w0 Z9 p' v! v3 `: ~; G& x; B
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; \# {2 I1 k& d, Q" [
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 O; e" P+ T# \$ K- y
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
# `( Y R$ M$ Z: W7 t! k1 h
7 U. i9 g8 H- x0 B
/*等待UPP传输完毕*/
! ]# L7 E9 z& v6 M% N" Z+ m' U7 P5 T3 `
//i=0;
" |4 L( s+ I* P" F5 M
//j=0;
) x) T; b% ]4 I# _4 U3 B
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 b4 T* o. V6 F; S- n
{
5 t* N1 G6 y1 Y1 P5 l
/* 测试UPP传输的同时操作普通DDR数据
) ~, | k9 E1 n3 a |
temp
=i;
) b9 d; V7 O4 M4 U" U5 Q: v( ]
i++;
$ {" t/ S4 W5 `% V/ Z: `% z% y) R
if(i==1024)
& d w; J* z! x
{
5 c8 E+ _8 F [( |* R- G- C( H0 m
i=0;
& p8 ^ c# A8 D" O, B) d
j++;
( e- P; W! C: c r" I- O8 f
}
' ~7 G Y6 a* p1 z7 T
*/
X0 m+ D8 N3 r1 E. t. w" H" ~- h% a/ }
5 k' A4 H! W2 s+ x# a
asm(" nop");
9 `$ K/ J3 v2 M: Q7 V) K! \
t& i L8 t6 I* D
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 r; U0 h( a. e9 c/ m
}
4 }# a& n- \( u* N
) L6 ]9 B, \; d, Y# p: w. I' o
/*检查UPP传输的数据是否正确 (loopback modes only)*/
7 s# q" c* c8 N
//UARTprintf( "i=%d\n",i);
' k6 t+ d+ D9 o5 W# Z- f5 e
//UARTprintf( "j=%d\n",j);
/ l2 g+ m3 b: k" g5 v. R# k* n
UARTPuts("Data mismatch in buffers.\n",-2);
# V E, Q! R, a H
if (upp_interrupt_count == 2 && upp_error_count == 0)
, L# u/ `) {8 O
{
4 ]( E3 I* I) m6 T9 W6 n/ n+ |
for (i = 0; i<upp_frame_size; i++)
& S% K* }/ J2 ^& [
{
3 |/ k+ d+ ?+ Q( H! j ~
if (upp_buffer_a
!= upp_buffer_b
)
) P7 L5 L! e9 r7 A, u# O/ z+ G7 {- \
{
4 A( x" h6 N7 L. z+ J- @: W9 e* z% k9 M
upp_error_count++;
- ~! ^9 n4 y7 F7 p% }# o' T
}
* c5 {$ Z6 U5 o; W/ N- d
}
* Y* n/ J& [2 c) G) ^9 X
}
; T; t- Y4 h6 _! g! T
$ q/ S, M9 I. ^) `0 B- _+ ^$ T
/* 报告通信结果*/
, q2 H3 I/ ?7 S, w+ A; K% w( d+ ]
if(upp_error_count != 0)
8 J k1 N1 M1 u8 q0 u+ y9 i
UARTprintf( "upp_error_count=%d\n",upp_error_count);
- a" W9 x+ ]4 s7 w) S" ~
else
' Z$ A& _$ |1 U
UARTPuts("uPP transfers complete!\n",-2);
1 j( \5 a1 Z2 z, p
3 b. N$ j# s+ o4 k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
( C: q, b5 F# m
UARTGets(ch,2);
8 T2 @0 H7 l7 P# R& ?' j
UARTPuts("\n", -2);
^3 j5 ^' B7 }3 }
% d4 c6 d) n* Z5 Y; l
if(ch[0] == 'y')
" T: h( r9 v% ?. I/ C& G
{
! [3 U, S! d+ F' W& z
/*打印全部读到的数据*/
* R V, w2 O. r7 k4 t3 k8 j) z
for(i=0; i<upp_frame_size; )
! k/ K$ C& D/ l: t$ \
{
. r* u/ A0 i4 o' V5 z. T9 W+ l
for(j=0; j<5; j++)
" }! u! `0 w/ }$ E: q( c. S* H
{
3 N3 u1 a. t/ A5 e0 C: N3 W9 N ~
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
& U( a1 b. D1 [- G3 L9 _
i++;
" U# ?! E$ ?+ T9 s. X$ s
//if(i >= 4096)
0 K4 L7 B8 G) m
// break;
1 I, q! [% |! P! ~# I
]2 c, u" _: ?: N
}
9 O& B! I) E2 B+ ]: _
UARTPuts("\n",-2);
* U: U+ s. s+ }
}
- n6 K9 d6 H( c
}
! k9 R D5 r: U% B3 ^* Q
7 S2 a5 k% W, ?# q+ W; B
}
* r8 v& ^2 |* x
; l& p0 z+ W- S5 b
* a" w, R! z W
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
I# B/ X& P0 S4 x6 U# h3 D
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" z0 a' T* k" H! H/ r# i. H! k m
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4