嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 J: K8 O, F- B e
Void UPP_TASK(Void)
+ y! ^) R) P! Q- L6 B: e/ N& ?
{
8 Q) `; G6 X! Z
- Y" k: `+ k( g2 k/ W) O
int i,j,k,target_int_count=2;
: b% U, m/ ]% g" ?" z! z9 \
char ch[2];
# z* r/ W* W& b8 ~% [$ a7 d
N7 F2 l* e1 t! P* a6 o5 j! `! t' b
6 o: L+ z0 Q- F' {# a
! N! t0 e. ], W0 E
upp_interrupt_count = 0;
* X3 u3 _1 c' S
upp_error_count = 0;
2 I: z1 g) l) ~* M0 u& w0 Y
$ v6 k0 c) v* ]5 x
UARTPuts("\tResetting uPP buffers...\r\n",-2);
1 F- N, [5 K8 S5 ~* @% s8 d) n; \
// Initialize data buffers
/ M/ Z& y5 i+ O ^0 x# Z+ N% d% U0 g9 Q
for (i = 0; i < upp_frame_size; i++)
l8 c6 R4 S6 H. p9 E4 G# p* f
{
% n7 g9 U) P" w* ^7 V& k+ I6 u
upp_buffer_b
=i;
4 d6 U Q' g" |2 O7 S
upp_buffer_a
= 0xDEAD;
. f5 j) b: q1 C3 h* F
}
' o s9 W2 L f
, G L6 c* i% Y+ F0 @
//for(i=0;i<1024;i++)
3 {8 F' d7 x* }- V( F, N
// temp
=0;
5 z: I1 a" i( d% |5 R
( J; @: Y0 N( x+ T2 j
//UPPReset();
" C8 `0 `( u2 ]8 z/ x
/*启动UPP DMA传输*/
9 e% q2 j' S# U8 D: ^) s
UARTPuts("upp_prog_dma_i\n",-2);
# U& B# N* ~4 j
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
P) Y0 K$ I. u( W; J, Z
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: T; B1 I8 M1 y: L' k
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
" N; c0 ]& ~( _( z- R
9 Y6 d; z4 E- V! ~2 J
UARTPuts("upp_prog_dma_i\n",-2);
( U3 c0 ~6 f" U0 ]2 v$ C' t8 Z+ m/ j
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
7 G: |& @2 Q/ ?; N; o$ V8 s" [, M
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ Z: I5 J9 l4 R3 _5 S5 r* s" {6 t9 K
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 Q: ]" g: E3 Z- \, ~4 V5 C
+ X m7 e+ Z4 m# r" c( A% O* t: g: @
/*等待UPP传输完毕*/
: z8 g8 Z0 I4 S5 D+ _" e! E
//i=0;
$ Y& _+ f+ F2 l3 k' s% B# K
//j=0;
: N5 O) N, |9 H
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
" v& F$ p2 D4 |7 {8 }
{
I& h4 [2 M8 ]8 i+ q0 J, Q
/* 测试UPP传输的同时操作普通DDR数据
9 |, V( O8 }2 K
temp
=i;
3 e1 }$ @4 i" h2 _1 n! m& n* ]6 U
i++;
+ Z5 {1 p- Q6 [! C$ F* I. j& i/ ~
if(i==1024)
6 J- U2 c% ^: ?% C
{
# N8 P5 T4 B6 O# z& Z% z
i=0;
* e, \" Q- G1 ]
j++;
5 ]1 C8 W* P) C
}
: `7 r+ q4 k/ j. [5 R9 r
*/
, l# k" c# U. V8 G
' t. c/ W2 S5 |# [6 [
asm(" nop");
7 k' g2 B- V+ }5 v$ Q" i
. A/ G% z$ m. Y) y% Z1 F2 Z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 d0 f2 Z* Y* X) I$ Y% X
}
' K! @& p, ?; h: d( G
! `' t! B; _2 C6 T: D) l! L
/*检查UPP传输的数据是否正确 (loopback modes only)*/
! f+ r+ }% m" J& J6 n/ g2 ]3 y" b: ~
//UARTprintf( "i=%d\n",i);
; H% h. u4 W, ~- d' z6 b
//UARTprintf( "j=%d\n",j);
) ^1 {. ?6 C# R7 I
UARTPuts("Data mismatch in buffers.\n",-2);
9 R% w) W8 h4 q& @# B) f/ j% D
if (upp_interrupt_count == 2 && upp_error_count == 0)
' K2 t( ~" J2 X/ _
{
0 [- Q. `4 G7 R1 C# E* k
for (i = 0; i<upp_frame_size; i++)
( N& U: m: d" c6 I0 ]5 s
{
% I2 M2 }/ U/ V6 x. s% R% \9 ^
if (upp_buffer_a
!= upp_buffer_b
)
B- w6 C% w5 l4 M: c
{
; Z: o6 X) I7 S7 q+ b
upp_error_count++;
y1 x5 Z' |; p3 Q! b0 \& B
}
1 w" s3 N8 d" a: p
}
3 b: L/ Z: e7 @/ e
}
4 |2 D* i- N* f' S' C+ ^8 R
2 H& m4 X+ K4 ?/ F% O
/* 报告通信结果*/
: R% U. K- b6 ^
if(upp_error_count != 0)
2 W# v5 R& w5 d# @- X
UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 {) N9 U' |. b
else
; ^5 g ?; I& q% Q* M( |* J
UARTPuts("uPP transfers complete!\n",-2);
) Q* ~. X4 C% |. H z# q+ O, y
0 ]9 s$ j8 y' }9 O k( w
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 c5 k2 M, d% G, t8 Z/ q* ]
UARTGets(ch,2);
7 j* C& I# t& U+ Y0 F
UARTPuts("\n", -2);
1 X" M' X8 \( a& l: z
: M# Z! O: W+ o; Q) H
if(ch[0] == 'y')
- b3 _) b7 c# n. ] Z5 ~/ [* [4 A
{
6 l {9 N8 n! |, j6 {
/*打印全部读到的数据*/
7 Y* ` O. d3 {- M: A8 R
for(i=0; i<upp_frame_size; )
7 n* `/ X2 I6 ^' w$ N
{
$ m7 z. T5 c- ?1 D1 \
for(j=0; j<5; j++)
1 |+ @- `- o B1 s% u
{
5 g5 O0 M2 w9 D% ]# g( d& A. x
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ k s% M5 Z& q4 J
i++;
8 i; U4 B5 f1 k1 `
//if(i >= 4096)
/ z3 K k/ G; R9 X! `1 N( v0 b1 ~% i
// break;
) _- o7 j$ K' k) W k$ G. ]# G
3 o8 Z9 N7 z9 A Q8 _: B
}
/ l$ t! @' V! x0 i" {7 [ M1 T
UARTPuts("\n",-2);
: _6 C; n1 O- A9 o& K
}
4 I; c4 \% t T7 N% E5 V9 i
}
0 a& e( V/ x$ {+ r6 {' v. k
$ J0 K) V/ a& P
}
: [: E) ]& r( {4 l' q" g. c. C0 c
2 n0 e6 a$ H& K, c& T; N: p
H# R# z# a6 i d
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" C5 k9 y7 I* Y& N' N1 a/ b
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& Z, D' a/ I" u' f! x: t& G
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4