嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
7 e) b% O6 [2 i2 |8 c& d, t1 w0 B
Void UPP_TASK(Void)
$ s) K! V( }2 Y/ ~
{
# g" [0 [$ g/ i( U; D2 k: V
3 j0 W6 [* ?8 q- \+ e( Y
int i,j,k,target_int_count=2;
) U2 O4 \3 @; v( O& A- W7 h
char ch[2];
6 e, M: ]/ O3 w2 } ^. p: `* S
8 ~3 p/ U$ ~: k6 F0 r7 s* L
; I( s/ I* H2 \) x; I; x* Y2 M8 R
: m. o$ C0 t3 _5 D
upp_interrupt_count = 0;
6 l: \9 m2 z$ J8 q4 |
upp_error_count = 0;
8 L4 h" x. [$ |0 E
7 h1 d" z% z! l1 x. E
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; q4 M: I: s# l* R( B% C b! C2 Y
// Initialize data buffers
, V7 k9 F, n% F4 R7 V0 D4 U" M. b8 x
for (i = 0; i < upp_frame_size; i++)
4 L# k. c3 \9 ]0 d
{
! F0 C- a. K! f( k* `& l9 Y
upp_buffer_b
=i;
& X/ s8 A) D6 S6 Q. a' | r8 g
upp_buffer_a
= 0xDEAD;
: w8 n; y4 z3 q
}
% a, J8 @9 x" o
, M% S+ D0 \3 r9 H
//for(i=0;i<1024;i++)
) h+ v1 _; {9 K
// temp
=0;
$ u8 n1 X8 b; K. f/ V
& V# }9 `8 {/ T% X
//UPPReset();
. b5 U5 _9 p) R2 u
/*启动UPP DMA传输*/
/ J- J3 u5 U; Z; Q' h' o0 N
UARTPuts("upp_prog_dma_i\n",-2);
8 [, z3 z7 L, s9 U7 ^
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
8 M. }' L# ]0 s& C0 \ f, B% v
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' ]6 ?5 [* M% s( {: I
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. C* ~ o% K6 R1 t7 s8 d
( j# L, d! V5 q6 U. p' H% `0 i
UARTPuts("upp_prog_dma_i\n",-2);
) @$ ~1 M' E1 B7 d/ d# _& u
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 ?8 c& S; B8 n, c- \% d
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 P& L6 l8 G p& G9 d: X
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( y! h+ A3 K* s! G w! ?$ }
) {7 }( O# V1 x* |
/*等待UPP传输完毕*/
! N1 l1 y* |, E8 \$ ^& v: j
//i=0;
) b3 f: |$ ^5 Z& D n8 J. r
//j=0;
0 g% M' E1 m g" I8 |1 T
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 ^' p; W" E! l' W. e
{
0 N; @) C2 b1 `8 o# |7 n
/* 测试UPP传输的同时操作普通DDR数据
6 K; n% G: ~' C9 U; t; C
temp
=i;
$ q% u2 D- H, }6 b* e
i++;
8 i! R9 u8 |7 r- K& X5 j$ H; d9 h
if(i==1024)
3 b8 X1 D/ R' q. O3 }
{
5 {1 ^8 }' ~* W9 G7 S" X) j
i=0;
# x, @! v7 H/ m1 I% j# ~
j++;
, U" m2 S1 z) W8 @3 W8 S; _
}
5 r" T7 A/ O. h+ C. x0 X
*/
5 ^; u: R/ _! {% v* U4 D8 |
7 @) M6 J, C% j
asm(" nop");
! {$ c) E( }) @0 Z) Y1 E
1 @+ k" V" }) A6 R
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; O9 u" y" r% k( {7 z) X2 I
}
% b* U+ e+ k0 ?. g5 t& ?# @3 l( ?
4 ~+ z7 V) t) o- _3 Z/ o/ P. @! ~
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 Z8 G7 P5 c1 a/ W" M( b' B
//UARTprintf( "i=%d\n",i);
- W$ Q, P1 N& ~2 s" w2 X
//UARTprintf( "j=%d\n",j);
: ?2 k) Y! N- v
UARTPuts("Data mismatch in buffers.\n",-2);
m" e( |8 |6 ]* f6 L: S
if (upp_interrupt_count == 2 && upp_error_count == 0)
' z3 X6 P, s- V, C8 [& t
{
6 ` T+ z! M; k% [
for (i = 0; i<upp_frame_size; i++)
! t! A9 x" u2 k( o+ Y2 p
{
. Y' r+ {; r ^5 B
if (upp_buffer_a
!= upp_buffer_b
)
+ D! K! x+ [8 N" x% q
{
" k6 b6 m, a" W/ B: A5 x
upp_error_count++;
2 c) G, S; y! @
}
0 Q& F! m f; m
}
0 x6 A2 w, T) F! z- K$ _& G
}
8 l( j* c0 @* R' ~7 r
3 j5 I5 I/ X: F3 g( F2 t& w
/* 报告通信结果*/
( F4 s1 L* C* E2 _( c7 e
if(upp_error_count != 0)
% x4 i% D: j5 p& s
UARTprintf( "upp_error_count=%d\n",upp_error_count);
" ?+ R# t/ l; b
else
6 _2 `: D: _& g0 R+ X! v/ }
UARTPuts("uPP transfers complete!\n",-2);
7 A5 ^/ L! o# k( \
* _2 I2 j# {6 Y) T& q9 J
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* ^ ` d2 f7 p& J9 n; B; b: f
UARTGets(ch,2);
# {9 V5 J0 R" ^. Z) X9 U
UARTPuts("\n", -2);
F! o4 K8 P9 t) k+ c8 p: ~9 r
4 m4 U1 x. u9 t. y$ @9 y
if(ch[0] == 'y')
- v* }2 E7 ^' P" l* y/ B
{
+ {, b7 a* f" i, ~( l# {* \8 Z
/*打印全部读到的数据*/
. |+ ?) [" W6 u* y9 H S3 |( g* t
for(i=0; i<upp_frame_size; )
N2 _% Z- S z9 Q! E) F
{
# y+ \- v( w- u8 {, D9 |7 v$ v
for(j=0; j<5; j++)
" |4 o8 X9 Y; G
{
' I& r" X# c, W8 O2 ~4 [# m
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
' e% v i- ^+ g
i++;
0 e+ }6 G, [; ~- ^) o* O* W- G
//if(i >= 4096)
$ [* Z7 K' P8 q V( G0 [8 e
// break;
+ y5 [7 Z) N5 ]; u/ n
" k- f( z I4 F! c, D+ p
}
6 `9 p5 D H6 k6 f" O
UARTPuts("\n",-2);
* n. a9 `. ]8 G( V* [0 h/ S
}
$ N. f! x$ P0 I5 Z8 O+ G2 @
}
) x& {/ H; W4 [6 L! r
7 S v" P, O0 i/ Q0 L
}
}$ ?, ]. u) o/ { ?5 K) J
& e( O8 `" y6 O7 x
& S' e- d; V3 D" c3 G
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 Z ?0 T) g, d+ K9 b7 k
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
( ]' s# n3 o+ C
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4