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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, p  y# v( E. s3 w" T! ]8 S
main文件:
$ u9 e+ G* h3 y! ^interrupt void interrupt4(void)  
7 P" U: W, y/ Z0 N2 ?{
5 p8 |2 U8 i7 @! u* a  Uint32 sample;
* k( I* a! o& J6 @+ i3 c- F% N* }/ R; y6 d, y
  sample = input_sample(); // read L + R samples from ADC) C/ G. {# c; D% @3 U( x- s
  output_sample(sample);   // write L + R samples to DAC
& t. K$ v. P! B+ J1 @8 w$ o  return;( k" M9 H# ?5 O: C
}+ I9 s& s, X, T8 }. r1 r: J6 A' O

! ]- ~4 A7 i% r& |- I9 ~' D- [int main( void )
( a7 U& S- v4 Q9 b{/ E( x. v2 h8 F5 b# Q" {4 n! D

+ B) d- L. M4 K' h& W    /* Initialize BSL */+ o( ^# ~' h3 v, |
    EVMC6747_init( );
+ z2 Q+ N1 |9 r1 ?  J# D! D% E        /* Call evmc6747_intr function */4 w8 n0 c- H+ q( \, K* S  I8 k6 B
    aic3106_init( );2 t: w8 W8 h1 y
        while(1);
% {& `7 ~5 E2 R+ v1 n9 r0 ^  M}
& I" ^- \, Y5 O& C9 H6 j* c- a
, l: u, k% x+ _1 u* n: i
* e, |$ L5 z" ~3 a- [" O5 o' _aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 ]9 Q$ d& W& t/* Initialize MCASP1 */
/ o7 q( ~5 p9 u, U: G$ [    mcasp = &MCASP_MODULE_1;
' x2 h: N; y1 |' z* v* x    mcasp->regs->GBLCTL  = 0;       // Reset
6 [  d1 c- O# V; s3 i0 _. K; w    mcasp->regs->RGBLCTL = 0;       // Reset RX
. S  s- o  [3 V, }# l, x4 V    mcasp->regs->XGBLCTL = 0;       // Reset TX
  z: K5 U- a% ~8 K7 N* L    mcasp->regs->PWRDEMU = 1;       // Free-running
6 x' V/ S3 \; s9 D   // configure McASP0 receive registers8 U3 H! M9 M2 I9 @5 f5 k! I# z2 D
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
. t9 ~2 a% A% f8 X! `9 }: Z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 \# F. t  c! a8 W3 R8 C8 k$ j/ b
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word  f4 ?. Z+ F  R" a' D, D! u+ D
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)! q( L1 |5 n# {4 a
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" j6 I( Q; ~2 |6 L    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
1 c- ~5 i, B- E# i  I# Q' }- m    mcasp->regs->RINTCTL    = 0x00000000; // Not used$ _3 M" f5 q6 F5 W$ Z! m
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& a* w* L$ h; @1 H

$ X& X4 l1 j; O+ ~- e4 a    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used4 F; M2 E' q, j. W: K
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 e8 I! |( B" d. f0 E" o! A    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 P4 N) J  R( r7 `+ i7 J: y5 J4 b/ y    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. `1 ?0 L+ V. _; i" ^: l" I
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK3 M) j1 G& ?9 N, ^' H: G, \; X
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
4 I" P- l. `$ E% I0 D# v7 C    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
& j& A# f: U# f; Z7 M/ b    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& I+ j- j: P; P5 e  w9 G6 A0 ]4 R2 t6 u* o5 E8 b7 f
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
' ]/ c$ E& n. y    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT$ e# z' \: c: ^3 B% }% U. k9 m
    mcasp->regs->PFUNC      = 0;          // All MCASPs
1 G' T9 |% @) e4 j$ {) G0 G    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. ?2 ]1 W6 O* x4 g
- U- j# M: H' B; D: [
    mcasp->regs->DITCTL     = 0x00000000; // Not used, [. F3 Z  h1 l4 D
    mcasp->regs->DLBCTL     = 0x00000000; // Not used5 K+ q* b! k& `+ x
    mcasp->regs->AMUTE      = 0x00000000; // Not used5 i2 T7 l& n) `2 V9 g
( k5 ]/ v  d9 B. A  B$ b- I: ]
/* Starting sections of the McASP*/
" m  h( a  ~4 B6 M+ w; S0 k6 ], u    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
9 t: S% L* C2 z+ p: L# s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ( Q9 k7 z; K2 v" Z8 ~& N6 h
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 d* ?4 _& h$ F  \; j& b  e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 `3 j  I4 i  C% S& ^

) Q- f0 j& n5 Q: x  o9 o8 R* g    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! v$ Y* L9 J! H$ M7 Q" Y3 e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
4 ^/ H8 k* k  h    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
4 T8 |6 o  `8 G) q/ f9 h. B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
4 t# `% F# G9 y7 n- \/ \5 b8 u/ B/ t9 h0 K
    mcasp->regs->XSTAT = 0x0000ffff;
. F; A' a3 h$ `$ ]! D    mcasp->regs->RSTAT = 0x0000ffff; 8 t0 z8 c8 W. F2 `; O/ B( c

! l% `0 {, _" e! m: J0 M3 ]3 {7 ]0 M* }    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! D& K% q' y; G/ _0 O
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );' t6 ^4 q% G* m3 o" r1 T3 P$ p% l
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 f+ K/ T  _7 H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 B1 O! n7 k! s' ?) P9 q, I2 _' G8 `/ j# f
    /* Write a 0, so that no underrun occurs after releasing the state machine */
/ @7 G; ?/ \) U- t" k' u8 P7 G    mcasp->regs->XBUF5 = 0;" t0 @+ M0 L* D; A9 K4 z
    mcasp->regs->RBUF0 = 0;
1 O& ]8 l/ h3 J: v5 M/ S! Y) [1 `7 x2 v8 U+ i/ d; B5 A) z4 b
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " L- v# P; L9 f6 c( k( S! z% [5 b) {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 ]" e8 E- [% `; i$ j! O1 o( ?    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
& P# d5 @; i, B- W9 C" ]/ t/ O" R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 `+ `( U% v1 M- x1 I+ L* K) K- Z& F/ O, E( \
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; - `) O" v  N. d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 l% t+ y" l9 S0 Q$ t: s
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % ^7 t$ e6 a) F# Z; r9 t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 w& i. @" A3 g' g' z+ j3 U' {/ f
1 l# j0 l' X7 w
    CSR = 0x0000;" w  \( k5 x. v4 k0 F1 L& E
    INTC_INTMUX1 = 0x3d;( N1 }6 P, M" }; T/ R; F/ V
    ISTP = (unsigned int)vectors;+ @& V) l% L5 R8 R2 Q4 R" p
    ICR = 0xFFF0;  
. p2 B% f) d9 s  Z" U% N& Z    IER |= 0x12;  * S5 n$ y: U& d9 r! k1 h4 V
    CSR |= 0x01;  
0 A( N, w% t/ U( |" D
$ }" ~6 R# O8 S3 A7 r; ~7 w: X* l: C
5 e/ D8 v1 c6 ^1 L0 H5 x6 l& K
还有就是两个输入输出函数:
8 n+ a0 l3 Y! n+ t9 l! Gvoid output_sample(Int32 out_data)  ]$ f. n- d& h0 T5 _
{+ J  N5 \+ L- k% p+ N% u) n
  AIC31_data.uint = out_data;  3 v0 Y$ _* P; Q% w# E5 Q
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
* t0 ?1 K$ Q. Q6 B7 g9 c}
& F; Z1 `+ S) {; S  S7 V& M8 N% x5 x
8 I  P5 {0 t4 ?4 F: J# V7 T3 `, P* ~Int32 input_sample(void)2 |6 R' V' ]( K7 Q
{  
' N, ^# Z" P, G9 J7 f$ u  AIC31_data.uint = MCASP1_RBUF0_32BIT;! d4 ^* @+ E* D0 B
  return (AIC31_data.uint);
- r2 W; d, [$ n: w/ L' [3 E+ O}
: a, _6 T7 y( Y- I; ?8 V/ t: v9 {1 u9 z. R
分享到:  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-12-8 15:23 , Processed in 0.040680 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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