C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5119|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ s, y/ e# ^( Bmain文件:% ~; b( x+ b& p2 a7 ]6 w
interrupt void interrupt4(void)  
; p/ v: C0 S; J3 J; ^. D7 n  _{
+ C4 O! {- F+ V. M4 f+ f  Uint32 sample;$ S: F$ w/ }! Q3 u( A
2 n# l( w+ ?1 h9 E9 {
  sample = input_sample(); // read L + R samples from ADC
) y2 g9 b# G& |  output_sample(sample);   // write L + R samples to DAC $ r1 T/ ~6 Q" h
  return;8 ?1 W9 R4 z- R7 v
}$ |, X1 ~* F7 b! i
, @: m% e+ Q# a3 Z& c1 G/ [
int main( void )
1 C3 u. r' R4 s' Y{
* n) @5 y: N! t- p6 k/ }. e
& ?3 k  ~% N" {2 Q( |    /* Initialize BSL */
' N: ?3 i6 U$ [- A# X2 `    EVMC6747_init( );; K' Q/ C3 i1 M9 \
        /* Call evmc6747_intr function *// V8 P4 g# k' Z
    aic3106_init( );. [% a7 `# S6 X+ k9 W* D# u6 F
        while(1);
+ P1 f! x+ j  j) Y}
; }& T5 h2 s+ F6 M, \9 u) P4 I. n* x5 {1 J

/ k3 s6 V+ A1 x6 }& q+ Oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 {3 N, u( I+ I* H  e8 f
/* Initialize MCASP1 */
$ _+ D# j1 A4 q/ ]& \9 t3 w  Y& K    mcasp = &MCASP_MODULE_1;
% t# R1 K! X; Y4 r    mcasp->regs->GBLCTL  = 0;       // Reset# o' |7 Y6 b' j4 G% I
    mcasp->regs->RGBLCTL = 0;       // Reset RX
* I* `/ G/ s- ?! j7 J    mcasp->regs->XGBLCTL = 0;       // Reset TX
' c9 A* I0 Q) F3 s2 w$ ~    mcasp->regs->PWRDEMU = 1;       // Free-running: ]! w3 _# W( W3 o: d: y' P
   // configure McASP0 receive registers" i4 W( Q9 z7 [6 j0 [$ c
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
, z$ O7 ~2 e; Q/ Q    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 y1 z' T6 ?# v4 ]* d
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 `( V7 t) P5 e9 \- X6 M* a
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ i5 S) S& {9 D. Q* G% t    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
& g6 _" a4 \  T, d2 j; b- e    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 Q/ g6 ~1 |% q6 s: n    mcasp->regs->RINTCTL    = 0x00000000; // Not used# N" W+ o0 h8 C' ]; \& d6 w
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& E4 l8 v9 X1 p. ]: s

5 i4 u2 u/ |/ J0 h! h# y$ J" O- w    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used9 ^+ r' _' n: @& d7 O. L2 f+ B
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ E2 |3 q/ |8 V5 A) Q- L- [9 s$ U/ Z
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, ~' I9 I" e0 Q7 L. E8 z  V# D0 J    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 D6 p0 S1 }2 V    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
* [5 L$ U+ c8 d6 l" X0 e3 [    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* i4 [( c& a# n" C/ C    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
! Z2 C0 F. J6 i& @  _    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 S* d5 ?, z; [' L
# D" i8 ]4 L# S% x. i; x
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ U# @! j) W' T1 j2 A
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 w# Z% `+ P1 W4 \6 ~2 W) a3 R3 q
    mcasp->regs->PFUNC      = 0;          // All MCASPs- G. P4 n2 v0 J% n% Z
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ D7 G! Y/ d9 R5 y! `

# w5 N1 x; m' N& Z; Z+ a5 C! n    mcasp->regs->DITCTL     = 0x00000000; // Not used
1 A8 A7 w# w! [1 b; [- q0 i9 x    mcasp->regs->DLBCTL     = 0x00000000; // Not used
. Z! A. x" ]- o; D  W$ m' o    mcasp->regs->AMUTE      = 0x00000000; // Not used5 D2 t5 Y) e  P% {% z/ O
' O$ ^  @5 N( S, u& C2 O7 e
/* Starting sections of the McASP*/* F5 [$ y8 I/ s7 P
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;   B* K8 T7 D/ q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  - K. `/ a2 ]4 Y" b
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
! z6 C9 \# {: O) p9 n8 o( \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( ?5 a4 L4 U; C1 K# d9 y
/ K0 v: \4 [4 Y! c! J) x    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : m* C$ _7 O- _! h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 P2 s2 p0 h7 s* {0 c' k5 o    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; % t, N: o1 Q. ]6 A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 m7 C. t! ?/ ^
# G( Z9 x! E3 H/ }7 G    mcasp->regs->XSTAT = 0x0000ffff;
7 V# R" O5 ]9 }& u) l" p+ P3 e    mcasp->regs->RSTAT = 0x0000ffff; ; S* e$ L2 |9 w: x/ N& B4 R# A- e* z
% [3 D3 e% k9 ^% E) V2 G
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' M. ~8 c: u) t9 G0 K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 b0 w) n7 x, }+ y6 D    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ `: Q+ d: w5 h/ Z% v8 ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( ~; N8 {# t: n* I! i0 [  ^1 d# a6 ]# O: f* F# N7 l0 g  e
    /* Write a 0, so that no underrun occurs after releasing the state machine */
2 b% R- _3 W0 m/ I    mcasp->regs->XBUF5 = 0;
( K/ V' U& d/ j    mcasp->regs->RBUF0 = 0;
  Y/ d- t6 F# C- H* l& S3 d2 L3 v; |# [
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# {4 p6 M3 y% r! }' Y" k% e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 n4 Y* k* l+ \+ I2 q: X
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* c/ l5 Z' M& a# H, @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! `+ ^7 k4 ?* t; ]1 m" i' f
, b% P0 ^6 w' e5 R/ X6 Z; D
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( X) j+ ~3 p8 N- x3 N, q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" C- u/ n  Z4 j0 p* ~5 W
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 2 K- c! M2 K' l- u% U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' j7 n& d2 E1 M/ ^6 u
4 O/ _' H" `6 @; G. B3 ]+ W1 V
    CSR = 0x0000;
& i" Z) p) d% M$ y8 ~( ~3 k    INTC_INTMUX1 = 0x3d;4 n. T& G- k# I8 d0 G! F) b/ G
    ISTP = (unsigned int)vectors;& a6 D& l$ r# b9 n9 R) H1 ~
    ICR = 0xFFF0;  # }& r+ y' I9 H4 e' L" J. K# @
    IER |= 0x12;  5 \- B; |' H4 X6 Q2 }: P4 |
    CSR |= 0x01;  
; z- R/ F8 A6 |8 S3 N% a+ ~2 W6 }( Z/ Z2 r$ h7 ]3 m0 |! ]
- |) w# a3 w1 r7 L; Z

6 t& ^) R, a  ?; U' ^" f还有就是两个输入输出函数:# \2 Z; u, m" I$ \
void output_sample(Int32 out_data)) I( ^# {- ^9 H! d
{2 \7 Q7 S/ h- X5 g( ?0 j+ w- \
  AIC31_data.uint = out_data;  ; i$ T/ P5 c' h) r/ t8 T0 n
  MCASP1_XBUF5_32BIT = AIC31_data.uint;' G' O7 |+ k% M
}
8 S! z8 C( M$ q
9 S- S8 k8 }1 Z0 C$ g5 y! K3 c' kInt32 input_sample(void)
, X, Y0 ~% B6 K+ z" ?: i+ }4 P) _{  , L$ `7 X4 c5 u4 l
  AIC31_data.uint = MCASP1_RBUF0_32BIT;: I: {( Q5 Z! a+ N
  return (AIC31_data.uint);
, T+ v, c% \) {1 ~. W}
: v2 a- Y9 D/ z* |
3 |4 Z1 c- p1 _+ h$ }# |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-7-8 19:35 , Processed in 0.043339 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表