嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
x! F6 X" _$ g5 E) T
Void UPP_TASK(Void)
0 f! W- K* O" u4 n6 Y8 s
{
$ C* p6 C1 ^: B! c
; }/ u8 Q% v5 o4 m' A( `
int i,j,k,target_int_count=2;
~! z9 ?$ d4 k6 s5 {
char ch[2];
* O! _3 J- x$ k
) F c* w3 G6 y8 o- l X/ W5 f k
: N) R2 f6 j* J# c! }. l
% w) K" r" u7 Q; K/ E+ q/ ?
upp_interrupt_count = 0;
2 \' Q0 E9 F8 `1 E& U' [0 {! _9 n
upp_error_count = 0;
8 U; l. [$ N0 s9 Y- m
+ o. b4 x" q9 [" @' @- K' g
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, i- Y3 h5 k1 `; Y, I- |/ i
// Initialize data buffers
; `3 B6 L, s7 W# e# P
for (i = 0; i < upp_frame_size; i++)
. g U' m2 X7 W9 w
{
( O5 x% \9 N) K' ~
upp_buffer_b
=i;
% x0 D2 L* z/ p- {' m: M
upp_buffer_a
= 0xDEAD;
0 {, x5 S4 D+ D. ~7 q0 C! K' j |
}
% R2 a0 r6 y- j) G& O+ J! h) E
: ~: m5 i0 m% u; u; }/ W
//for(i=0;i<1024;i++)
1 W1 J) c1 h. |8 K4 e) W+ h0 t( Q+ K
// temp
=0;
9 ?0 v; ^: T0 u% h, u4 F
, e( Q U$ v. f* X* _3 J9 B
//UPPReset();
9 p, [& R- X. B1 Q$ ~/ R
/*启动UPP DMA传输*/
* G; G1 L! Q7 B6 O3 L' l7 p
UARTPuts("upp_prog_dma_i\n",-2);
3 u! i* i/ S& x: V1 B
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' T0 T2 w7 P8 E7 a7 M
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; J( ?6 w% S" B: Q' J+ m( ]- u
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. v7 v1 v/ ^$ Q. B
+ [* c5 h* l( \% `6 `' o' P
UARTPuts("upp_prog_dma_i\n",-2);
" ~: L/ D1 \8 C Z+ d
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ c R9 F8 x: ~9 @3 J6 Z
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 g6 @6 u$ T: f7 [* |5 `# O
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 [# B; `- K6 C1 R( o& r" y6 h
# G9 Q- k9 U, \" p3 x+ f
/*等待UPP传输完毕*/
4 ]3 b/ J, K- M/ V/ B
//i=0;
. G( w0 D; n% Q; W+ _3 D
//j=0;
9 j5 ?2 p4 W6 q) i" L8 e
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
& Z5 p, n1 B- H! l, S1 G& L' {
{
- W1 ]! a1 V5 c5 N
/* 测试UPP传输的同时操作普通DDR数据
, S: ^+ `0 J9 }+ |
temp
=i;
' D( T: G. t3 Q! i; O% p
i++;
: {& n! x) r. F" a2 E( \, L
if(i==1024)
1 G) n: L0 e( ^; x5 O
{
$ m& s0 f; O4 |+ N W3 J" B
i=0;
1 f4 Y0 B) Z2 M7 u3 a* N( {) w' j
j++;
8 `9 G8 Z7 ~5 S [7 Q5 B$ w8 M
}
. t0 u9 W4 r; ^* @! j
*/
1 b5 V+ v( A* [& B' }# }" ^
" I. a6 F! e( O+ A, d
asm(" nop");
% Q/ _% _: Z- P0 z6 o: L$ B
3 d+ {' [; J4 X
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ \5 C! P' z; B3 n' o7 V2 w, \* q0 H
}
# [6 t. m8 t% J, O ~
/ E1 x3 _- M9 X
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ [, ^1 {, E6 I/ z
//UARTprintf( "i=%d\n",i);
9 V2 i3 _& A) j5 j
//UARTprintf( "j=%d\n",j);
* P3 _; |* R* |) D! a
UARTPuts("Data mismatch in buffers.\n",-2);
6 [2 V/ m& y3 I v) f2 d7 l
if (upp_interrupt_count == 2 && upp_error_count == 0)
5 m6 T" {, ~2 E& p) ]' U4 ?4 B
{
8 R7 x, c) K/ h9 ~8 b6 s. L+ `
for (i = 0; i<upp_frame_size; i++)
2 i$ V7 y+ L' f% K& Z7 y
{
# x) }3 j K; { B2 E
if (upp_buffer_a
!= upp_buffer_b
)
; w0 O$ P9 M) G' L( |1 Z
{
3 o+ _7 z% D1 r7 l1 b5 P' }
upp_error_count++;
+ G2 G+ K, n* I4 G# |1 v8 T
}
( }: X: _6 F8 v5 L, W
}
) C) ]1 P2 ~ A$ o% j- R9 V8 C
}
! C$ a% N# a/ ^
( n8 h C2 D: Y/ w7 m
/* 报告通信结果*/
. l! N5 Z$ b+ m: q) i4 j
if(upp_error_count != 0)
- D p2 V9 i: V2 \8 D' M
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* d6 p, J' N& m6 S
else
% m& [/ N# ~( P0 f% j% Y! X
UARTPuts("uPP transfers complete!\n",-2);
: t" i! T3 w R! N
* f# t- {3 p2 {2 Z/ X8 d) T) L
UARTPuts("Do you want to print all the data?(y/n) ",-2);
/ R# T" _$ _6 U
UARTGets(ch,2);
, E& O& {$ i* q
UARTPuts("\n", -2);
( ]8 G/ ], C4 o
3 \/ N% o* s o
if(ch[0] == 'y')
3 M. n/ a, B% n W
{
& _: `' B( n0 L6 a1 h H0 \ i5 h4 ?
/*打印全部读到的数据*/
% p/ @2 N- v! P; F" S* q9 a
for(i=0; i<upp_frame_size; )
; N9 T/ E; \; R2 x, E( u }7 C
{
5 T9 q8 s, i8 N
for(j=0; j<5; j++)
0 r# L* r1 p: Z, D% _" i+ h2 B* U
{
3 |3 Q' b$ l& l: y- G9 x+ N
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) l" H' b7 b4 X! Z
i++;
( ~: ]/ _# D i( g
//if(i >= 4096)
: O% K- T. @$ o- X
// break;
) L1 x8 K8 d5 x- e
8 ?. T& \+ m2 R& c& ^+ t
}
4 ^; U+ D- T, S2 j
UARTPuts("\n",-2);
5 p; c% J. {$ P+ a% V7 T+ K$ M1 U, U+ k
}
# p" _$ S$ A( P$ S
}
% _$ W/ Y. K( Y# S( k! K7 i5 j
( i" L9 F- D% P7 p. P# ]3 G( q3 g6 B
}
6 f$ B1 Y. W1 r$ {+ D$ w. u
4 u; c2 f- X# m9 \' n7 e
1 ~2 E) O% C6 v4 Y
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 I. O0 T$ \& K+ G6 U. Q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
+ l3 x. H2 O/ O2 J" Y% |8 P0 C
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4