嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
" k3 u& o: }& X* E P6 f, f
Void UPP_TASK(Void)
+ N) F8 K" L! D/ @
{
: z) Z2 H$ h1 ~% S
& ^" O& n, ]: s+ l; Y
int i,j,k,target_int_count=2;
e) e& c! a7 F. \
char ch[2];
5 B0 G/ o/ E! q! |4 ?& F
3 [# w- x$ O- E/ z0 k" |
. J6 {* a. y. W. R1 v( s
: z' m3 ^) V/ g! Y @) ], N* n
upp_interrupt_count = 0;
5 B1 D, G, o: P% V
upp_error_count = 0;
# @- j( H5 d+ g1 D, b
: d# s, J$ [/ c9 c1 [2 m, {
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% Q2 y; Q0 ^ t6 B* g1 [6 q# u7 A" \
// Initialize data buffers
" l/ r$ g& J' u
for (i = 0; i < upp_frame_size; i++)
/ V* J. f9 n. Q8 Y
{
3 \) U) \; F; s5 ?% H2 E' d% {( Z
upp_buffer_b
=i;
" ^. \# b$ K& A- P+ V0 s5 v
upp_buffer_a
= 0xDEAD;
, Z# u* v2 Q q8 d" f" Z$ w" {
}
! k$ V' E' ?; m X
* {$ e% t7 A! O2 ^2 |
//for(i=0;i<1024;i++)
# x9 K: W, I- q B
// temp
=0;
8 L2 a) g' E% h; W* ]
- y$ C& H+ i$ k
//UPPReset();
- Q' W5 L& k9 X$ B7 u4 N
/*启动UPP DMA传输*/
4 U$ b t4 V. s$ B' T4 O. @ d7 D5 B
UARTPuts("upp_prog_dma_i\n",-2);
1 O% A2 ~8 z0 a3 J$ N6 |+ ^
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
+ e( O6 \) i* x4 h- ~3 L) G- @
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# @' _3 M6 Z# ~7 N
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% l& f8 o, c: F% U5 y6 ?+ j
( g$ U |5 H1 P: A6 K; V
UARTPuts("upp_prog_dma_i\n",-2);
7 H6 O; X3 J+ O3 \! N( @1 r" g4 ^
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ r# Q- r( a3 H9 d* B8 ]; O
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 @; o0 W; Z# ~8 U! D4 L
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( z8 [2 Y' i& n5 ]9 H9 H
% d+ s/ x6 _2 b' R2 x
/*等待UPP传输完毕*/
6 ^% r& L) s3 P) U
//i=0;
9 O+ d ^( j% e6 r. ^
//j=0;
* R: z3 N1 s5 F6 Y% m4 X Z7 s
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" U% O0 G p& c2 p& x) [
{
5 U! N6 o9 O% J3 T9 G4 }/ \
/* 测试UPP传输的同时操作普通DDR数据
3 L3 i9 Y) o0 T. @
temp
=i;
; T" L4 z1 S& a- G, s1 O8 L
i++;
; q' \& t' U1 E4 A; F T
if(i==1024)
3 v0 V! B2 F' _, K4 M( |& y2 T
{
2 H" A4 _$ N+ C/ L, j
i=0;
' p+ `* N* _; a! N$ b- n% `2 t8 t
j++;
( M( X4 u4 q# L6 b' J7 p
}
8 S6 f; m1 q3 r0 g) `
*/
+ M, P" A% l; _, k3 }" \- ]
# ~! v! y1 t( [4 q* v2 D" i
asm(" nop");
( W, W2 {( |! Y
; V4 o" r! G! S. A
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ m: o9 S6 u- k5 [$ j
}
4 y% {" H, h P# M2 b4 i
% b5 `2 n% n) W! N; h/ h+ Z: E9 y. S
/*检查UPP传输的数据是否正确 (loopback modes only)*/
/ _0 Y/ j: V& q0 S& f
//UARTprintf( "i=%d\n",i);
v5 F3 J. Q9 c b; ?
//UARTprintf( "j=%d\n",j);
" _2 \+ n. X, ~' f
UARTPuts("Data mismatch in buffers.\n",-2);
1 {. q$ R( f9 s, w! t0 I5 R
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ H) P$ Q" S4 U0 x7 V
{
) p8 A. f% B7 _1 y' a" L" b
for (i = 0; i<upp_frame_size; i++)
" \6 ~! M6 h) U. ^$ v
{
( f! t1 u9 g6 B& s: Z$ D
if (upp_buffer_a
!= upp_buffer_b
)
1 z9 t* d7 a' l1 C& y1 G/ ^4 }
{
5 D% O7 k T' d0 @6 U; t
upp_error_count++;
) h7 D# k+ V8 w4 b
}
% R$ A) f" a3 w8 T! U) L
}
5 f( R5 a5 `/ m1 g0 B( {/ g
}
- w3 T# U% i8 K
+ I/ I/ Z! Q: f$ C# k
/* 报告通信结果*/
# D1 k I! |/ [! X0 ]
if(upp_error_count != 0)
% q7 c; z! C1 }9 v: y' q8 {% E
UARTprintf( "upp_error_count=%d\n",upp_error_count);
7 A0 s& Z1 a" k" Q7 A8 \5 _3 X
else
" O# |/ R% y5 l. X* O
UARTPuts("uPP transfers complete!\n",-2);
1 e. r! z5 V2 j& Z
4 I# u# @+ k% Q# `& Y6 Z
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' m, c' K4 B! Z: t$ j* J& r
UARTGets(ch,2);
# y( w3 W9 }2 F+ `3 ^. e' ~. R
UARTPuts("\n", -2);
) Z) T1 J, W+ z- k, u2 O0 \, U
& m7 f6 D7 c0 D" u7 V3 H: {
if(ch[0] == 'y')
8 M. [8 D" r' X/ Q% E# z! H
{
: N m0 ]* e1 g5 X$ U) b
/*打印全部读到的数据*/
8 L9 f2 P9 z# P; |5 W8 n/ @6 Y* F
for(i=0; i<upp_frame_size; )
) v3 f+ P1 g5 Y" D. J5 N7 q
{
- }& v; Q1 @$ D
for(j=0; j<5; j++)
0 {8 Z/ |" ]3 M0 m i9 O
{
9 y7 c% }- `6 U1 }6 k
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
+ D7 ~6 p0 A; i6 D: G
i++;
! V& |/ O }! G. a
//if(i >= 4096)
* S, }$ @0 _- I5 p! B. A6 `
// break;
9 C% a" d H% g/ [9 j6 F: y6 c# n
9 z( J, z: {; u
}
% ~( O0 y+ S1 W9 _. G) g0 J
UARTPuts("\n",-2);
: {) e9 C& w: n" ^' o% z
}
! d9 B' P7 ~0 n% H* Q# t5 [
}
+ q* `; r. S; v' a3 ]+ ~0 D- A
& w' `3 v' s- A4 [
}
3 K. B' L8 Q/ ?/ u5 q; S, F7 ~( I
+ n+ e j! J- k8 b$ t- ?
% |& E+ n. |) p. E, r5 ^0 }% K( [
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 F( u% z' Y; C7 q8 b* I- E
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
/ R7 D8 J. n8 ?8 n% [; V
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4