C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
4 Y$ a. Y& s7 d: |* Umain文件:# \) G8 W" e# G2 e+ ]  {
interrupt void interrupt4(void)  
" P2 P3 W! p' T0 e+ H: L{8 i# t2 j+ R4 ~  ^# b1 g
  Uint32 sample;
6 V& O/ F, Q2 G- B  ^# W& m+ D0 d- a5 j* S, M
  sample = input_sample(); // read L + R samples from ADC
8 a& I' C$ O  a  ]1 u; V4 |  ~  output_sample(sample);   // write L + R samples to DAC . z! p7 }& \  p5 t% z" W
  return;0 o1 M+ w" a+ i
}5 r0 }8 u: L* \- @

$ Z# w0 f( L" e1 [0 A% d8 uint main( void )) T0 g$ _* c7 u
{
+ _6 J9 O) H0 Y  y/ T# l0 J6 M; L7 _3 C
    /* Initialize BSL */, Y/ N) {. y6 \: ]/ B2 g2 B
    EVMC6747_init( );0 C  ?( O, v  B
        /* Call evmc6747_intr function */
4 N4 T; z  p) V3 \9 a4 _    aic3106_init( );
# X4 B$ b$ W3 H: I% }        while(1);: @, Q1 q/ c7 P+ L$ _# o' ^
}
( z: ^7 l2 U$ [) ~" }0 k0 j; f2 K
4 b- r9 d4 K# M& b$ g& k$ f  u9 T" d: V, m
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# \; y; C& T2 m2 \/* Initialize MCASP1 */* S' N; s" h4 o+ Z7 I
    mcasp = &MCASP_MODULE_1;& F+ J, I; [, h& [* g" t
    mcasp->regs->GBLCTL  = 0;       // Reset7 }4 C% j4 p  Z) z* y, I. D
    mcasp->regs->RGBLCTL = 0;       // Reset RX
# [/ n( s, E( G) h( T+ H; e    mcasp->regs->XGBLCTL = 0;       // Reset TX
% U( v$ V2 ]% \; s    mcasp->regs->PWRDEMU = 1;       // Free-running$ X& I$ e! u, T6 i% `7 u2 O' }
   // configure McASP0 receive registers
* [1 \: @! M  G    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used" [, ]; L+ l5 D6 D
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# r) w0 r! w3 e! \- p5 a# G- \1 c
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' M- X" @1 ]' U4 a    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side): S3 B  z6 }- J/ k* ?
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)) Y+ o, c# y9 s/ J& V7 h: E
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
' ]: f+ e. k1 F  X, e: }# e    mcasp->regs->RINTCTL    = 0x00000000; // Not used
( h! U- `9 n; Y" H- x9 D    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# t4 ]! ]/ `2 k% `$ Z+ ~- _4 m$ c* \8 G: V4 `2 `# s" s
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. W+ T2 l) z% d, Z& o) u    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; Q& Y8 R  D. f& a/ J# i    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 t% V" Y  f* C( }% B$ K. k
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 S: ^- z3 x6 h& h) i3 w. d) k
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
# \! U" j3 ]/ K7 Z) i2 @    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
5 @" C& S' B7 [0 I( L# [    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
8 |, _. c  v7 x& U" Y0 o- g" W    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 {+ F( ]+ `% u6 |2 S' v7 [  l3 A
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN7 a5 y- v; W) `& Z
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT' O- ]# y- y: u2 k. v
    mcasp->regs->PFUNC      = 0;          // All MCASPs
- C* i; e$ r; @; c! W4 {    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: V/ f0 W2 J' w  ]! \/ R

6 W* x) m/ T- y0 H7 o    mcasp->regs->DITCTL     = 0x00000000; // Not used& Y% O2 \: A: \% N
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
! V$ W  J9 t" @1 R' N    mcasp->regs->AMUTE      = 0x00000000; // Not used2 w- `2 W( k# F$ X
( `( s9 z0 p1 `) e, X* U+ S& o
/* Starting sections of the McASP*/5 G2 s7 R6 r1 L6 a7 D
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! ]/ X+ M7 V5 v( ^# a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  " v9 U1 _4 f- Y
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * |0 ~: ]6 A& K) A% u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( _9 _! L; F$ ~0 k2 Z3 u, b
! N4 U' u# @8 V6 [, o4 F6 y    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& L5 R; D' q/ s/ U, f/ b# _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
& k- ^0 M4 D* p- g+ C; m    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - w, G0 [+ s/ [4 Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( c5 e4 z0 n* A- y
$ U  A3 N6 B+ M  J    mcasp->regs->XSTAT = 0x0000ffff;
9 f4 Z6 C2 d) F, c" \! Z4 ?$ g, o    mcasp->regs->RSTAT = 0x0000ffff; 9 @* k) I, H5 [9 g9 S

$ K6 U  z2 F+ k; f    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! z7 R9 L& W, P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" p9 E) U) D" h) h
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; G3 `' ?1 r# u1 S8 P; V, M; U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 j- ?; i/ U+ W: H
5 h2 M% \6 |$ I
    /* Write a 0, so that no underrun occurs after releasing the state machine */
7 S* r7 b2 i1 K1 e2 u- V/ f    mcasp->regs->XBUF5 = 0;0 X0 I8 y0 j; E1 w5 G: ]
    mcasp->regs->RBUF0 = 0;( ?+ `8 w# x, o- f

: n2 X% b; u6 ?2 \9 ?1 B0 Q    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 q% }; F% L& B* V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
; G$ I' I: D' N% E, b- s- E    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / W6 s# B5 F( B7 A% S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# x, \3 l/ J9 \* }# e! w
6 N# }, u; f6 f& K, p" R    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 S* B& E! E$ O5 B- D" l" j& P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
& ]' L4 `: j3 e  N1 u    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 N) l5 ?2 x0 c1 u# `1 m2 M5 h' T% Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
* Z: z6 v7 t0 [9 T. E+ T. j4 P
$ ~! `0 O" g  W4 P    CSR = 0x0000;$ k' W1 `: F9 D7 U3 N, @
    INTC_INTMUX1 = 0x3d;
2 t: ?( k  [, i: B# Q6 b    ISTP = (unsigned int)vectors;
2 B3 C: C3 O; v) l  x0 D    ICR = 0xFFF0;  
4 [: ]: C+ @% D8 u; e    IER |= 0x12;  
* Q6 Z0 P& K& A7 w# x    CSR |= 0x01;  
9 b1 j- b2 |2 x. P6 t  U, D2 `( J
; w( W" Q7 P" i# f+ M% ?( ]4 A/ z
9 _: T4 D  b! o3 x. q0 m, ~- u8 L
还有就是两个输入输出函数:
1 Z* h, k7 w. Ivoid output_sample(Int32 out_data)
4 b; Q  d1 O$ j$ _1 M3 M- e9 [{
( D+ P9 a! G% ^7 _2 G: j  AIC31_data.uint = out_data;  ; f& q+ o7 f& W% ^
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ s4 c9 r& e: P, h" P, `* ]2 h: g}
) e0 S) A0 m1 P6 j) M
$ O) @' Q3 F" t8 U) H9 d$ l1 }' ~# MInt32 input_sample(void)
$ w0 t! ^6 d; N& r# i{  
& Q8 N$ m4 }. O! s  O: c% Y  AIC31_data.uint = MCASP1_RBUF0_32BIT;7 v/ a7 |  z- [( D; f9 m
  return (AIC31_data.uint);7 L5 v8 N' r$ }* @3 x6 |' L* Y
}8 k& o7 y- c9 z# G: Q* ]. h

+ X4 v  C! M0 K
分享到:  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, 2026-2-24 07:11 , Processed in 0.045991 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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