嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
8 g5 s; S+ M3 n& s% B+ A4 J# ?
Void UPP_TASK(Void)
* \* f, `/ b3 Y X) |# S' ~
{
4 m& c `9 T! e4 E
7 D- {( _- _8 q8 U% Z Y
int i,j,k,target_int_count=2;
$ o0 ] a2 j) `' n& R& U$ H
char ch[2];
( i3 ~% U7 v. i) Y+ [" O2 w
- g I3 D/ X9 |- C$ U1 r
( Q. w* i% C: \# j
1 k7 o7 v5 u' ^: l
upp_interrupt_count = 0;
- v/ G. ^# a6 c1 r! s
upp_error_count = 0;
, v, B! A0 ?3 h
4 K6 W, K& f& R( T7 J. R& y: }4 b
UARTPuts("\tResetting uPP buffers...\r\n",-2);
( ^# w p2 _/ X
// Initialize data buffers
7 Y! D' X9 n9 G$ L0 h6 P& ?8 R
for (i = 0; i < upp_frame_size; i++)
+ s0 {/ b! c; W8 }
{
0 n0 W6 O" }# B: k+ T$ Z
upp_buffer_b
=i;
. ~5 `9 u+ R7 s5 J& G7 b
upp_buffer_a
= 0xDEAD;
0 }2 C) ~5 Y7 W7 j u7 m
}
" {, b6 Y% S3 N0 O5 O; ^
8 c; a4 S! {# y# W+ a
//for(i=0;i<1024;i++)
J1 r6 B# P' ?
// temp
=0;
! H6 _9 r* v7 E3 ]
! Q& E# U7 h4 S& _, }# C
//UPPReset();
3 x' q1 Q- x1 Z
/*启动UPP DMA传输*/
7 g, O, v* p7 _5 a9 z
UARTPuts("upp_prog_dma_i\n",-2);
2 X/ R! L) h c' i2 ~& Q
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
h6 o% e* m* z6 L& {! \( ~! r
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 r1 I+ J8 Y1 Z1 H; {& b# ^
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
, r, t% i: T% Y, a: v9 W! W9 s7 E
4 W1 k$ N. S& t$ ^
UARTPuts("upp_prog_dma_i\n",-2);
+ m: r$ \" |# |
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, e, _/ [4 @; S) l
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ b: b. y) e6 U* D
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
2 [; Z6 ?! t& a% J
2 l; q7 {. A% Z/ B6 g( o! m6 @; u
/*等待UPP传输完毕*/
0 {' l0 @1 D, v5 y5 z* C7 u. L4 ^
//i=0;
+ O; R$ V$ f. _: ?: x- `
//j=0;
) ~" T9 _: N+ ~& B. ?* I! F
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; d% O1 b$ Z: Q5 q6 C
{
7 b2 h% j! @0 k( Y
/* 测试UPP传输的同时操作普通DDR数据
/ ~4 y% D( e2 X) M/ v8 H
temp
=i;
2 m6 s3 f& u0 d
i++;
: \2 b9 J1 ~9 K2 q; J
if(i==1024)
7 v x$ y% s- d0 C8 E0 D
{
" {+ v. K+ ], y% w! \) c# W
i=0;
1 D. H* o% G4 x1 i' o0 k! C/ u
j++;
! M) ]0 e4 j5 A G# r" H
}
" c9 s2 z( \. L# H2 p
*/
$ j. X$ L! A2 \
' g/ @+ j) h( [. o ]! v
asm(" nop");
1 D8 Y% [0 g' |
9 t. w- T* D& S: J$ Q n
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
* Q6 {- D1 b. y# g! [
}
5 c" E/ C; u- x# M
; ?8 P6 i F% ^' ?1 \1 l/ _
/*检查UPP传输的数据是否正确 (loopback modes only)*/
! Y9 t$ c5 h0 C; o& u
//UARTprintf( "i=%d\n",i);
( w# U( E1 D. b/ x+ d6 h+ U9 G
//UARTprintf( "j=%d\n",j);
8 b a$ A& t6 w9 u0 @- U% W2 w
UARTPuts("Data mismatch in buffers.\n",-2);
+ ?0 x& L9 T; Q( g9 U# v- X V
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 L6 C2 Z' P/ Z
{
$ b/ f4 B, f( \: B
for (i = 0; i<upp_frame_size; i++)
. s5 ?1 P. m! r, F9 c9 n. g& K
{
( S6 Y1 D+ ]# z" p, ^
if (upp_buffer_a
!= upp_buffer_b
)
2 m" N# [% G; n2 z$ q# S: h
{
! r9 X' X: {/ B( @, U
upp_error_count++;
' P- a4 z/ h2 w7 I/ ]
}
+ A0 b1 Z( X" e. c! @
}
9 Z8 S( o; l5 S! j
}
" t" [' U* L4 \; ^$ }3 w- f
6 }/ f# \$ }9 [5 s
/* 报告通信结果*/
. G0 o7 }# Q& {) ~- w, L
if(upp_error_count != 0)
8 p0 `' F9 U6 S2 Q% j3 h ]) t
UARTprintf( "upp_error_count=%d\n",upp_error_count);
. y" p( J8 ]. B7 f* U: q
else
: s. ~ j' n4 c. l8 @) T( w
UARTPuts("uPP transfers complete!\n",-2);
% f) O3 a$ w/ I
0 [& |" d A+ K: r6 ~
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* z0 ]2 l6 f0 K9 n4 D
UARTGets(ch,2);
* ^; r; ?, b+ P/ N% Y. t. E
UARTPuts("\n", -2);
" g/ O/ t9 P% k) `; `
- z& i7 }3 J, Y/ D" Z: ^
if(ch[0] == 'y')
4 c- v0 ^9 ~( G( v( e4 Q" h" H. d
{
) O$ L, j, B# h6 A: @; T# m; _) f
/*打印全部读到的数据*/
: q0 G+ D' k* m( e* O0 P
for(i=0; i<upp_frame_size; )
. l: U6 V+ R% M
{
4 E, j- T" W* t: t4 a( U
for(j=0; j<5; j++)
; M" l& T1 W7 q) f! J7 y
{
) L& n8 a3 z4 ?7 C( t
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 ^. I' _2 D/ K6 J, q
i++;
# H# n9 d& V4 o0 m+ W
//if(i >= 4096)
- I( |& ^2 n* m' @8 l t2 }
// break;
* i& D4 k! S# \% l6 s/ K& W2 R1 R
5 ]1 @( a2 S+ ~. Y
}
7 b/ |) D# Q* K3 g8 X7 E
UARTPuts("\n",-2);
# N+ C: Z# H' X7 W0 ^
}
+ N2 q$ Y) i2 K, l+ [& C
}
8 X4 l$ o3 ^! R3 g3 c( W5 J
# a, L6 }& v- Z: f f2 i- ]$ S a! i
}
- {' f, T Y3 g9 c6 }
, v3 _; O! {- F! t' M
3 P4 w3 c. b2 v$ ~! R0 Z
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
+ z% g& {) q0 [8 A- ?! \
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 m: i n8 d- V" ]
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4